[Перевод] Обработка естественного языка — это очень весело!

машинное обучение Программа перевода самородков Python NLP
[Перевод] Обработка естественного языка — это очень весело!

Как компьютеры понимают человеческий язык

Компьютеры хорошо работают со структурированными данными, такими как электронные таблицы и таблицы базы данных. Но наше повседневное общение как людей выражается в словах, а не в таблицах, что очень сложно для компьютеров.

К сожалению, мы живем не вездеСтруктурированныйВозраст данных.

Большая часть информации в этом мире неструктурирована — это не просто необработанный текст на английском или других человеческих языках. Как заставить компьютер понимать этот неструктурированный текст и извлекать из него информацию?

обработка естественного языка, именуемыйNLP, представляет собой подмножество области искусственного интеллекта, предназначенное для того, чтобы компьютеры могли понимать и обрабатывать человеческий язык. Давайте посмотрим, как работает NLP, и научимся писать программы на Python, которые могут извлекать информацию из необработанного текста.

Примечание. Если вам все равно, как работает NLP, и вы просто хотите вырезать и вставить некоторый код, сразу переходите к разделу «Конвейер NLP с Python».

Могут ли компьютеры понимать язык?

На заре компьютеров программисты пытались писать программы, которые понимают такие языки, как английский. Причины этого очевидны — люди записывали события в письменном виде на протяжении тысячелетий, и было бы очень полезно для людей, если бы компьютеры могли читать и понимать эти данные.

Компьютеры еще не понимают английский язык так полно, как люди, но они уже могут многое! В некоторых областях то, что вы можете делать с помощью НЛП, кажется магией. Применение методов НЛП к вашим проектам может сэкономить вам много времени.

Более того, последние достижения в НЛП легко доступны через библиотеки Python с открытым исходным кодом, такие какspaCy,textacyиneuralcorefиспользовать. Все, что вам нужно сделать, это написать несколько строк кода.

Извлекать смысл из текста сложно

Процесс чтения и понимания английского языка сложен — даже без учета логики и последовательности английского языка. Например, что означает заголовок этой новости?

Природоохранные органы допросили владельцев нелегальных барбекю. («Природоохранные органы допрашивают владельца бизнеса по поводу незаконных поджогов угля».)

Экологический орган допрашивает владельцев о незаконном сжигании угля? Или буквально регуляторы поджарили владельцев? Как видите, парсить английский на компьютере очень сложно.

Выполнение сложной задачи в машинном обучении обычно означаетпостроить трубопровод. Идея состоит в том, чтобы разделить вашу проблему на небольшие части и использовать машинное обучение для решения каждой маленькой части в отдельности. Свяжите несколько взаимодополняющих моделей машинного обучения, и вы сможете делать очень сложные вещи.

И это именно та стратегия, которую мы собираемся использовать для НЛП. Мы разбиваем процесс понимания английского языка на маленькие части и наблюдаем, как работает каждая часть.

Создайте конвейер НЛП шаг за шагом

Давайте посмотрим на текст из Википедии:

Лондон — столица Англии и самый густонаселенный город Великобритании. Расположенный на берегу реки Темзы в юго-восточной части британского острова Великобритания, Лондон на протяжении двух тысяч лет был крупным поселением. Он был основан римлянами, которые назвали его Лентинион. (Лондон — столица и самый густонаселенный город Англии и Соединенного Королевства. Стоящий на реке Темзе на юго-востоке острова Великобритания, Лондон на протяжении двух тысячелетий был крупным поселением. Он был основан римлянами, которые назвал его Лондоном.)

(источник:Википедия «Лондон»)

Этот текст содержит несколько полезных фрагментов информации. Было бы здорово, если бы компьютер мог прочитать этот текст и понять, что Лондон основан римлянами, город в Англии и т. д. Но чтобы добиться этого, нам нужно сначала научить компьютер самым основным понятиям письменных знаний, а затем углубляться.

Шаг 1. Сегментация предложений

Первое, что нужно сделать в пайплайне — это разбить текст на отдельные предложения, из чего мы получим:

  1. «Лондон — столица Соединенного Королевства и самый густонаселенный город в Англии и Соединенном Королевстве (Лондон — столица и самый густонаселенный город Англии и Соединенного Королевства).»
  2. «Лондон, расположенный в долине Темзы, был крупным поселением в течение следующих двух столетий. (Лондон, стоящий на реке Темзе на юго-востоке острова Великобритания, был крупным поселением на протяжении двух тысячелетий)».
  3. Он был основан римлянами и назывался Лентинион. (Он был основан римлянами, которые назвали его Лондиниум.)

Мы предполагаем, что каждое предложение представляет собой независимую мысль. Тогда мы сможем написать программу, которая понимает отдельные операторы легче, чем программу, которая понимает всю статью.

Создать модель сегментации предложений так же просто, как использовать пунктуацию для сегментации предложений. Но современные конвейеры НЛП часто требуют более сложных методов для устранения опечаток в документах.

Шаг 2: Символизация текста

Теперь, когда мы разбили документ на предложения, мы можем обработать эти предложения шаг за шагом, начнем с первого предложения в документе:

«Лондон — столица и самый густонаселенный город Англии и Соединенного Королевства».

Следующим шагом в конвейере является разделение этого предложения на отдельные слова илисимвол. это называетсяПричастие. Затем посмотрите на результат токенизации этого предложения:

«Лондон», «является», «тот», «столица», «и», «наиболее густонаселенный», «город», «из», «Англия», «и», «это», «Соединенные ", "Царство", "."

ПричастиеЭто легко сделать на английском языке. Мы просто разделили эти слова, разделенные пробелами. Мы также используем знаки препинания как слова, потому что они тоже имеют значение.

Шаг 3: Угадайте атрибуты каждого слова

Далее нам нужно угадать свойства каждого слова - существительные, глаголы, прилагательные и т.д. Знание роли каждого слова в предложении может помочь нам сделать вывод о значении предложения.

Чтобы узнать свойства слов, мы можем скормить каждое слово (включая слова некоторого контекста) предварительно обученной модели части речи:

Модели классификации частей речи изначально обучаются на миллионах английских предложений, в которых были отмечены атрибуты каждого слова, что позволяет модели научиться воспроизводить такое поведение тегов.

Помните, что эта модель основана на статистике — она не понимает значения слов так, как люди. Все, что он умеет, — это угадывать значение предложения, полагаясь на похожие слова и предложения, которые он ранее помечал.

После обработки всего предложения мы получаем что-то вроде этого:

Основываясь на этой информации, мы смогли начать подбирать некоторые очень основные значения. Например, существительные в этом предложении включают «Лондон» и «столица», поэтому весьма вероятно, что это предложение о Лондоне.

Шаг 4: лемматизация текста

В английском (и большинстве других языков) слова появляются в разных формах. Рассмотрим следующие два предложения:

I had a pony.

I had two ponies.

Оба предложения говорят о существительныхпони, но они имеют разные перегибы. Знание основной формы слов помогает компьютерам обрабатывать текст, чтобы вы знали, что два предложения говорят об одном и том же понятии. В противном случае «пони» и «пони» — это как два совершенно не связанных между собой слова по отношению к компьютеру.

В НЛП этот процесс называетсялемматизация- Найдите самую основную форму каждого слова в предложении илилемма.

То же самое касается глаголов. Мы также можем провести лемматизацию, отыскав исходную неспрягаемую форму глагола. так "I had two ponies"становится"I [have] two [pony]".

Лемматизация обычно делает свою работу с помощью таблицы поиска с лексическими формами, основанными на его части речи, и, возможно, некоторых пользовательских правил для работы со словами, которые никогда раньше не встречались.

Это предложение с лемматизацией, добавляющей исходную форму глагола:

Единственное изменение состоит в том, чтобы заменить «есть» на «быть».

Шаг 5: Определите терминаторы

Далее нам нужно рассмотреть важность каждого слова в предложении. В английском языке есть много часто встречающихся слов-наполнителей, таких как «and», «the» и «a». При статистике по тексту, по мере увеличения частотности этих слов, будет много неясностей. Некоторые конвейеры НЛП помечают эти слова как «терминаторы» — слова, которые необходимо отфильтровать перед выполнением какого-либо анализа.

Это предложение после фильтрации терминаторов:

Идентификация терминаторов обычно выполняется путем запроса жестко заданного списка известных терминаторов. Но нет списка стандартных терминаторов, общих для всех приложений. Этот список во многом определяется вашим приложением.

Например, если вы создаете поисковую систему, связанную с рок-группами, убедитесь, что вы не игнорируете слово «The». Не только потому, что это слово встречается во многих названиях групп, но и из-за известной рок-группы 80-х под названиемThe The!

Шаг 6: Анализ грамматики зависимостей

Следующий шаг — найти зависимости между каждым словом в предложении, что делаетРазбор зависимостей.

Цель состоит в том, чтобы построить дерево, которое присваивает каждому слову в предложенииотецслова. Корень дерева — главный глагол в предложении. Начало дерева разбора, построенного из этого предложения, выглядит так:

Но мы можем сделать больше. Чтобы определить родительское слово каждого слова, мы также можем предсказать отношения, существующие между двумя словами:

Это дерево синтаксического анализа показывает нам, что подлежащее в предложении является существительным.Лондон, и это икапиталмеждуbeсвязь. В итоге мы нашли полезную информацию -ЛондонЯвляетсякапитал!Если мы проследим за всем деревом синтаксического анализа этого предложения (а не только за графической информацией), мы даже можем обнаружить, что ЛондонСоединенное Королевствостолица.

Анализ зависимостей выполняется путем ввода слов в модель машинного обучения и вывода результата, как мы использовали модели машинного обучения ранее для прогнозирования частей речи. Но разбор грамматик зависимостей — сложная задача, требующая целой статьи в качестве контекста для разбора некоторых деталей. Если вам интересно, как это работает, есть отличная статья Мэтью Хоннибала, которую стоит прочитать."Разбор английского языка в 500 строках кода Python (Parsing English in 500 Lines of Python)".

Но хотя в 2015 году автор опубликовал заметку о том, что этот метод теперь является стандартом, он устарел или даже больше не используется автором. В 2016 году Google представил новый метод разбора зависимостей под названиемParsey McParseface, в котором используется новый подход к глубокому обучению, который превосходит предыдущие по производительности и быстро распространяется в отрасли. Год спустя они выпустили новую модель под названием ParseySaurus, в которой некоторые аспекты были улучшены еще больше. Другими словами, синтаксический анализ по-прежнему актуален в поиске и постоянно меняется и совершенствуется.

Многие английские предложения очень расплывчаты и их трудно разобрать, и это нужно иметь в виду. В этих случаях модель делала предположение на основе наиболее похожего предложения, которое она анализировала ранее, но оно не было идеальным, и иногда модель допускала досадные ошибки. Но со временем наши модели НЛП продолжат анализировать текст лучше и разумнее.

Хотите попробовать анализ зависимостей на своих собственных предложениях?Вот отличная интерактивная демонстрация от команды spaCy..

Шаг 6 (ниже): Найдите словосочетания с существительными

До сих пор мы рассматривали каждое слово в предложении как отдельную сущность. Но иногда соединение некоторых слов может дать более рациональное выражение идеи или события. Мы можем использовать информацию в дереве синтаксического анализа зависимостей, чтобы автоматически сгруппировать вместе все слова, описывающие одно и то же.

Например, вот такой:

Мы можем комбинировать фразы с существительными вместе, чтобы получить такой результат:

Мы должны решить, стоит ли делать этот шаг, исходя из конечной цели. Но если нам не нужны дополнительные подробности о том, какие слова являются прилагательными, и нас больше интересует извлечение полного смысла предложения, это обычно простой способ упростить предложение.

Шаг 7: Распознавание именованных объектов (NER)

Теперь, когда мы проделали всю тяжелую работу, мы наконец-то можем отказаться от письменной грамматики и приступить к реализации идей.

В наших предложениях есть следующие существительные:

Некоторые из этих существительных имеют то же значение, что и настоящие. Например "Лондон", "Англия"и"Соединенное Королевство"представляет физические местоположения на карте. Было бы здорово обнаружить их! С помощью этой информации мы смогли использовать НЛП для автоматического извлечения списка реальных географических местоположений, упомянутых в документе.

Распознавание именованных объектов(NER) направлен на обнаружение и обозначение этих существительных, которые представляют что-то в реальном мире. После обработки каждого слова в предложении с помощью нашей модели тегов NER предложение выглядит так:

Но системы NER не просто выполняют эти простые поиски по словарю. Вместо этого он использует контекст слова в предложении и статистическую модель, чтобы угадать, какой тип существительного представляет слово. Хорошая система NER может распознавать имена людей на основе контекстных подсказок».Brooklyn Decker"и географические названия"Brooklyn".

Это то, что классическая система NER может маркировать:

  • имя человека
  • название компании
  • Географическое положение (физическое и политическое)
  • наименование товара
  • Дата и время
  • количество
  • название события

NER широко используется, поскольку помогает легко получать структурированные данные из текста. Это один из самых простых способов получить результаты от конвейеров НЛП.

Хотите попробовать технологию распознавания имен собственных?Вот еще одна замечательная интерактивная демонстрация от команды spaCy..

Шаг 8: Анализ кореферентности

На данный момент у нас есть четкое представление о предложениях. Мы узнали о части речи каждого слова, о зависимостях между словами и о том, какие слова представляют именованные сущности.

Однако нам еще предстоит решить большую проблему. В английском языке много местоимений - какон,онаиЭто. Это наши упрощения имен, которые повторяются в предложениях. Люди могут получить содержание этих слов в соответствии с контекстом. Но наша модель НЛП не знает, что означают эти местоимения, потому что она проверяет только одно предложение за раз.

Давайте посмотрим на третье предложение в нашем документе:

«Он был основан римлянами, которые назвали его Лондиниум».

Если мы проанализируем это предложение с помощью конвейера НЛП, мы узнаем, что «оно» было построено римлянами. Но было бы полезнее знать, что «Лондон» был основан римлянами.

Когда люди читают это предложение, легко сделать вывод, что «это» означает «Лондон». Цель синтаксического анализа кореферентности состоит в том, чтобы найти такое же отображение на основе местоимений во всем предложении. Мы хотим найти все слова, которые относятся к одному и тому же объекту.

Это результат использования разрешения кореференции для «Лондон» в нашем документе:

Объединив вместе информацию о кореферентности, дереве синтаксического анализа и информации об именованных объектах, мы можем многое извлечь из этого документа!

Разрешение корреференции — один из самых сложных шагов в конвейере, над которым мы работаем. Это даже сложнее, чем анализ операторов. Недавние достижения в области глубокого обучения привели к более точным методам, но они не идеальны. Если вы хотите узнать больше о том, как это работает,начало здесь.

Хотите участвовать в совместном разрешении кореферентности?Посмотрите эту совместную демонстрацию разрешения кореферентности от Hugging Face..

Построение конвейеров НЛП с помощью Python

Вот обзор нашего полного конвейера НЛП:

Разрешение кореференции — необязательный шаг, который не всегда выполняется.

Ой, сколько шагов!

Примечание. Прежде чем мы продолжим, стоит упомянуть, что все это шаги в построении традиционного конвейера НЛП, и вы можете решить пропустить или повторить определенные шаги в зависимости от вашей цели и того, как реализована ваша библиотека НЛП. Например, некоторые библиотеки, такие как spaCy, сначала используют синтаксический анализ зависимостей, а затем выполняют сегментацию операторов после получения результата.

Итак, как мы строим этот трубопровод? Благодаря замечательным библиотекам Python, таким как spaCy, сборка конвейера завершена! Все шаги завершены и готовы к использованию.

Во-первых, если у вас установлен Python 3, вы можете установить spaCy следующим образом:

# 安装 spaCy 
pip3 install -U spacy

# 下载针对 spaCy 的大型英语模型
python3 -m spacy download en_core_web_lg

# 安装同样大有用处的 textacy
pip3 install -U textacy

Код для запуска конвейера NLP на части документа выглядит следующим образом:

import spacy

# 加载大型英语模型
nlp = spacy.load('en_core_web_lg')

# 我们想要检验的文本
text = """London is the capital and most populous city of England and 
the United Kingdom.  Standing on the River Thames in the south east 
of the island of Great Britain, London has been a major settlement 
for two millennia. It was founded by the Romans, who named it Londinium.
"""

# 用 spaCy 解析文本. 在整个管道运行.
doc = nlp(text)

# 'doc' 现在包含了解析之后的文本。我们可以用它来做我们想做的事!
# 比如,这将会打印出所有被检测到的命名实体:
for entity in doc.ents:
    print(f"{entity.text} ({entity.label_})")

Если вы запустите этот оператор, вы получите таблицу именованных сущностей и типов сущностей, обнаруженных в документе:

London (GPE)  
England (GPE)  
the United Kingdom (GPE)  
the River Thames (FAC)  
Great Britain (GPE)  
London (GPE)  
two millennia (DATE)  
Romans (NORP)  
Londinium (PERSON)

вы можете просмотреть каждыйЗначение кодов объектов.

Обратите внимание, что он ошибочно принял «Лондиниум» за имя человека, а не за название места. Это может быть связано с тем, что в тренировочных данных нет ничего похожего на него, но это дает лучшее предположение. Если вы анализируете текст с терминологией, обнаружение именованных объектов обычно требуетсделать тонкую настройку.

Давайте превратим идею обнаружения сущностей в очиститель данных. Предположим, вы пытаетесь выполнить новыйПолитика конфиденциальности GDPRИ обнаружите, что у вас есть тысячи документов с информацией, позволяющей установить личность, например с именами. Теперь ваша задача — удалить все имена из документа.

Удаление имен из тысяч документов вручную заняло бы годы. Но с НЛП все намного проще. Вот очиститель данных, который удаляет обнаруженные имена:


import spacy

# 加载大型英语 NLP 模型
nlp = spacy.load('en_core_web_lg')

# 如果检测到名字,就用 "REDACTED" 替换
def replace_name_with_placeholder(token):
    if token.ent_iob != 0 and token.ent_type_ == "PERSON":
        return "[REDACTED] "
    else:
        return token.string

# 依次解析文档中的所有实体并检测是否为名字
def scrub(text):
    doc = nlp(text)
    for ent in doc.ents:
        ent.merge()
    tokens = map(replace_name_with_placeholder, doc)
    return "".join(tokens)

s = """
In 1950, Alan Turing published his famous article "Computing Machinery and Intelligence". In 1957, Noam Chomsky’s 
Syntactic Structures revolutionized Linguistics with 'universal grammar', a rule based system of syntactic structures.
"""

print(scrub(s))

Если вы запустите это, вы увидите, что он работает так, как ожидалось:

In 1950, [REDACTED] published his famous article "Computing Machinery and Intelligence". In 1957, [REDACTED]   
Syntactic Structures revolutionized Linguistics with 'universal grammar', a rule based system of syntactic structures.

Извлечение информации

Тот факт, что spaCy может сделать это из коробки, просто фантастика. Но вы также можете использовать выходные данные, проанализированные spaCy, в качестве входных данных для более сложных алгоритмов извлечения данных. EстьtextacyБиблиотека Python, которая реализует различные алгоритмы извлечения общих данных на основе spaCy. Это хорошее начало.

Один из реализуемых им алгоритмов называетсяИзвлечение полуструктурированного оператора. Мы используем его для поиска в дереве синтаксического анализа простых предложений с подлежащим «Лондон» и глаголом формы «быть». Это поможет нам найти информацию о Лондоне.

Давайте посмотрим, как выглядит код:

import spacy
import textacy.extract

# 加载大型英语 NLP 模型
nlp = spacy.load('en_core_web_lg')

# 需要检测的文本
text = """London is the capital and most populous city of England and  the United Kingdom.  
Standing on the River Thames in the south east of the island of Great Britain, 
London has been a major settlement  for two millennia.  It was founded by the Romans, 
who named it Londinium.
"""

# 用 spaCy 来解析文档
doc = nlp(text)

# 提取半结构化语句
statements = textacy.extract.semistructured_statements(doc, "London")

# 打印结果
print("Here are the things I know about London:")

for statement in statements:
    subject, verb, fact = statement
    print(f" - {fact}")

Он распечатывает это:

Here are the things I know about London:

 - the capital and most populous city of England and the United Kingdom.  
- a major settlement for two millennia.

Может быть, это не будет слишком впечатляющим. Но если вы примените этот код ко всей статье Википедии о Лондоне, а не только к этим трем предложениям, вы получите довольно впечатляющие результаты:

Here are the things I know about London:

 - the capital and most populous city of England and the United Kingdom  
 - a major settlement for two millennia  
 - the world's most populous city from around 1831 to 1925  
 - beyond all comparison the largest town in England  
 - still very compact  
 - the world's largest city from about 1831 to 1925  
 - the seat of the Government of the United Kingdom  
 - vulnerable to flooding  
 - "one of the World's Greenest Cities" with more than 40 percent green space or open water  
 - the most populous city and metropolitan area of the European Union and the second most populous in Europe  
 - the 19th largest city and the 18th largest metropolitan region in the world  
 - Christian, and has a large number of churches, particularly in the City of London  
 - also home to sizeable Muslim, Hindu, Sikh, and Jewish communities  
 - also home to 42 Hindu temples  
 - the world's most expensive office market for the last three years according to world property journal (2015) report  
 - one of the pre-eminent financial centres of the world as the most important location for international finance  
 - the world top city destination as ranked by TripAdvisor users  
 - a major international air transport hub with the busiest city airspace in the world  
 - the centre of the National Rail network, with 70 percent of rail journeys starting or ending in London  
 - a major global centre of higher education teaching and research and has the largest concentration of higher education institutes in Europe  
 - home to designers Vivienne Westwood, Galliano, Stella McCartney, Manolo Blahnik, and Jimmy Choo, among others  
 - the setting for many works of literature  
 - a major centre for television production, with studios including BBC Television Centre, The Fountain Studios and The London Studios  
 - also a centre for urban music  
 - the "greenest city" in Europe with 35,000 acres of public parks, woodlands and gardens  
 - not the capital of England, as England does not have its own government

Теперь все становится интереснее! Мы автоматически собираем большое количество информации.

Чтобы было интереснее, попробуйте установитьneuralcorefбиблиотеку и добавьте разрешение корреференции в свой пайплайн. Это даст вам больше информации, так как будет захватывать предложения, которые содержат «это», а не «Лондон».

Что еще мы можем сделать?

посмотри на этоДокументация spaCyитекстовая документация, вы найдете множество примеров методов, которые можно использовать для анализа текста. То, что мы видели до сих пор, является лишь небольшим примером.

Вот еще один пример: представьте, что вы создаете веб-сайт, который показывает пользователям информацию о городах по всему миру, которую мы извлекли в предыдущем примере.

Если на вашем сайте есть функция поиска, было бы неплохо иметь возможность автозаполнения обычных запросов, как это делает Google:

Предложения автозаполнения Google для «Лондон»

Если мы это сделаем, нам нужен список предложений, которые мы могли бы дать пользователю. Мы можем использовать НЛП для быстрого получения этих данных.

Вот один из способов извлечения фрагментов нарицательных существительных из документа:

import spacy
import textacy.extract

# 加载大型英语 NLP 模型
nlp = spacy.load('en_core_web_lg')

# 需要检测的文档
text = """London is the capital and most populous city of England and  the United Kingdom.  
Standing on the River Thames in the south east of the island of Great Britain, 
London has been a major settlement  for two millennia.  It was founded by the Romans, 
who named it Londinium.
"""

# 用 spaCy 解析文档
doc = nlp(text)

# 提取半结构化语句
statements = textacy.extract.semistructured_statements(doc, "London")

# 打印结果
print("Here are the things I know about London:")

for statement in statements:
    subject, verb, fact = statement
    print(f" - {fact}")

Если бы вы использовали этот код для обработки статьи из Википедии о Лондоне, вы бы получили что-то вроде этого:

westminster abbey  
natural history museum  
west end  
east end  
st paul's cathedral  
royal albert hall  
london underground  
great fire  
british museum  
london eye

.... etc ....

Сделайте еще один шаг вперед

Это всего лишь небольшой пример того, что вы можете сделать с помощью НЛП. В следующих статьях мы поговорим о некоторых других приложениях, таких как классификация текста или о том, как система Amazon Alexa разбирает вопросы.

Но что нам нужно сделать сейчас, так это установитьspaCyи использовать его. Эта идея также должна работать, если вы не являетесь программистом Python и используете другую библиотеку НЛП.

Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.


Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.