Есть ли способ векторизовать только слова, т. Е. Не из корпуса или мешка слов в Python? - PullRequest
0 голосов
/ 29 октября 2018

Мой вариант использования - векторизация слов в двух списках, как показано ниже.

ListA = [Japan, Electronics, Manufacturing, Science]

ListB = [China, Electronics, AI, Software, Science]

Я понимаю, что word2vec и Glove могут векторизовать слова, но они делают это через корпус или пакет слов, т.е. мы должны передавать предложения, которые разбиваются на токены, а затем векторизируются.

Есть ли способ просто векторизовать слова в списке?

PS. Я новичок в НЛП, поэтому прошу прощения за любые очевидные моменты, изложенные.

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Вот как вы sort it in descending order of cosine values ответите на свой вопрос в моем другом комментарии:

import spacy

nlp = spacy.load('en_core_web_md')
tokens = nlp(' '.join(ListA+ListB))
list_to_sort = []

for token1 in tokens:
    for token2 in tokens:
        list_to_sort.append((token1.text, token2.text, token1.similarity(token2))

sorted_list = sorted(list_to_sort, key=lambda x: x[2], reverse=True)
print(sorted_list)
0 голосов
/ 30 октября 2018

Я предполагаю, что вы хотите видеть 3 самых похожих слова в ListA для каждого слова в ListB. Если это так, вот ваше решение (и если вы хотите, чтобы все верхние слова совпадали со словами в ListB, я также добавил дополнительную строку для этого):

import spacy

nlp = spacy.load('en_core_web_md')
tokensA = nlp(' '.join(ListA))
# use if wanting tokens in ListB compared to all tokens present: tokensA = nlp(' '.join(ListA+ListB))
tokensB = nlp(' '.join(ListB))

output_mapping = {tokenB.text: [] for tokenB in tokensB}
for tokenB in tokensB:
    for tokenA in tokensA:
        # add the tuple to the current list & sort by similarity
        output_mapping[tokenB.text].append((tokenA.text, tokenB.similarity(tokenA)))
        output_mapping[tokenB.text] = list(sorted(output_mapping[tokenB.text], key=lambda x: x[1], reverse=True))

for tokenB in sorted(output_mapping.keys()):
    # print token from listB and the top 3 similarities to list A, sorted
    print(tokenB, output_mapping[key][:3])
0 голосов
/ 29 октября 2018

То, что вы можете искать, это просто предварительно обученные вложения. Это тот случай? Если это так, вы можете использовать это:

import spacy

nlp = spacy.load('en_core_web_md')
tokens = nlp(' '.join(ListA+ListB))

for token1 in tokens:
    for token2 in tokens:
        print(token1.text, token2.text, token1.similarity(token2))
...