Практическое занятие с помощью средства извлечения похожих слов на основе НЛП

искусственный интеллект NLP

вводить

SimilarVocabulary — это мой проект с открытым исходным кодом на github. Сам проект не сложен. Он использует векторы слов в НЛП для извлечения слов с высокой степенью корреляции. В проекте используется spacy, библиотека с открытым исходным кодом в НЛП. Библиотека поставляется с Обученная модель, которая может предсказывать текст на английском языке. адрес проекта:

https://github.com/wotchin/SimilarVocabulary

детали кода

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

Загрузите модель:

nlp = spacy.load('en_core_web_lg')скопировать код

Среди них en_core_web_log — это обученная модель, которая идет в комплекте с библиотекой.Эта модель очень большая и ее нужно скачать самостоятельно.Скрипт инициализации привожу здесь: init.sh

получить вводимый текст

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

    while True:
        if line != "":
            words += line.replace("\n"," ")
            line = f.read()
        else:
            break

    nlp = spacy.load('en_core_web_lg')
    print("modal loaded.")
    tokens = nlp(words)скопировать код

установить порог

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

threshold = 0.0
    while threshold <= 0.0:
        try:
            threshold = float(input("input threshold value:"))
        except:
            threshold = 0.0

    length = 3
    try:
        length = int(input("input result length:"))
    except:
        length = 3скопировать код

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

Реализовать запрос сравнения

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

  while True:
        queue = [] #[['dog',0.1],['cat',0.2]...]
        i = input("input your word:")
        if i != "":
            txt = nlp(i)
            for token in tokens:
                score = token.similarity(txt)
                if score >= threshold and family_check(txt.text.strip(),token.text.strip()) < 0:
                    if len(queue) >= length:
                        index = 0 # in order to contrast 
                        value = 1.0
                        for i in range(0,len(queue)):
                            if queue[i][1] < value:
                                value = queue[i][1]
                                index = i                        if value < score:
                            queue[index] = [token.text,score]

                    else:
                        queue.append([token.text,score])

        print(queue)скопировать код

использовать

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