Я присоединился к социальным сетям в 2006 году. В то время Orkut был довольно известной социальной сетью. В 2010 году Facebook выиграл гонку над Orkut, и с тех пор я являюсь активным пользователем Facebook.

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

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

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

  • Косинусное сходство

Это мера сходства двух векторных объектов.

В поиске информации и интеллектуальном анализе текста слова или документы представлены в виде векторов. Косинусное сходство двух разных слов / документов говорит нам, насколько эти два слова / документа похожи или различны.

  • Передача обучения

Трансферное обучение - это метод машинного обучения, который фокусируется на хранении знаний, полученных при решении одной проблемы, и применении их к другой, но связанной проблеме.

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

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

BERT - лучший пример трансферного обучения. Это основанный на нейронной сети метод Google для предварительного обучения обработке естественного языка (NLP). Это означает двунаправленные представления кодировщика от трансформаторов. Это помогает компьютерам понимать такие языки, как английский, как люди. BERT помогает понять нюансы языка и контекст слов в предложениях. Следовательно, для многих задач понимания языка высокого уровня нет необходимости изобретать колесо. BERT оказывает им базовую поддержку.

Алгоритм ранжирования комментариев

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

Как обсуждалось ранее, для понимания языка мы используем BERT или, более конкретно, реализацию BERT-as-a-service. Чтобы использовать его в вашей локальной настройке, вам необходимо установить следующие библиотеки python

!pip install bert-serving-server  # server
!pip install bert-serving-client  # client

После того, как вы установили вышеуказанные зависимости, мы можем запустить BERT-сервер в отдельной консоли командной строки с английскими предварительно обученными моделями BERT.

bert-serving-start -model_dir /tmp/bert-models/uncased_L-12_H-768_A-12 num_worker=4

Нам нужно инкапсулировать наш алгоритм в некую структуру классов. Следующий класс представляет входные данные (т. Е. Сообщение и комментарий), а выход - это оценка их сходства (т. Е. Разность косинусов).

class Comment:
    def __init__(self,post,comment):
        super()
        self.bc = BertClient()
        self.post = post
        self.comment = comment
        self.post_embed = bc.encode([self.post])[0]
        self.comment_embed = bc.encode([self.comment])[0] 
        
    def get_similarity(self):
        return np.dot(self.post_embed, self.comment_embed) /           (np.linalg.norm(self.post_embed) * np.linalg.norm(self.comment_embed))

Возьмем один пример, который помогает нам понять работу алгоритма.

post = 'India win Cricket world cup !!!'
comments = ['such tragic incident can avoided','World will never forget you','can\'t people see and walk','so what can I do','There is solution for such incident','rediculous','Lol','Congratulations']

Для лучшего просмотра комментариев:

Post Text :
'India win Cricket world cup !!!'
Comments :
* such tragic incident can avoided
* World will never forget you
* can't people see and walk
* so what can I do
* There is solution for such incident
* rediculous
* Lol
* Congratulations

Нам нужно создать список объектов комментариев из указанного выше сообщения и комментариев. Каждый объект содержит текст сообщения и один из текстов комментария из списка комментариев. После формирования списка объектов комментария отсортируйте его по значению функции get_similarity ().

comment_list = get_Comment_list(post,comments)
sorted_comment_list = sorted(comment_list,key=lambda x : x.get_similarity(), reverse=True)

После итерации sorted_comment_list мы получаем отсортированный список комментариев по релевантности

Post Text :
'India win Cricket world cup !!!'
Comments according to relevance:
* World will never forget you
* Congratulations
* Lol
* such tragic incident can avoided
* can't people see and walk
* rediculous
* There is solution for such incident
* so what can I do

Вы можете увидеть код в следующем репозитории.

Что нужно улучшить

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

Друзья, поделитесь своими мнениями / предложениями по алгоритму идентификации троллей.

Спасибо за прочтение!

Несколько интересных блогов, в которых я читал эту статью

Https://medium.com/analytics-vidhya/semantic-similarity-in-sentences-and-bert-e8d34f5a4677 (Специально для сервера BERT.)

«Http://nlp.town/blog/sentence-similarity секс/