Ошибка при извлечении фраз с использованием Gensim

1

Я пытаюсь получить биграммы в предложениях, используя Фразы в Gensim следующим образом.

from gensim.models import Phrases
from gensim.models.phrases import Phraser
documents = ["the mayor of new york was there", "machine learning can be useful sometimes","new york mayor was present"]

sentence_stream = [doc.split(" ") for doc in documents]
#print(sentence_stream)
bigram = Phrases(sentence_stream, min_count=1, threshold=2, delimiter=b' ')
bigram_phraser = Phraser(bigram)

for sent in sentence_stream:
    tokens_ = bigram_phraser[sent]
    print(tokens_)

Даже если он ловит "новый", "йорк" как "новый йорк", он не ловит "машину", учась как "машинное обучение"

Однако в примере показанном на веб-сайте Gensim, они смогли поймать слова "машина", "обучение" как "машинное обучение" ".

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

Теги:
gensim
word2vec
text-mining
data-mining

2 ответа

2
Лучший ответ

Методика, используемая gensim Phrases, основана исключительно на статистике совпадений: как часто слова складываются вместе, по отдельности, в формулу, на которую влияет min_count и сравнивается с значением threshold.

Только потому, что ваш набор упражнений имеет "новый" и "йорк", встречаются друг с другом дважды, в то время как другие слова (например, "машина" и "обучение" ) встречаются только один раз друг с другом, что "new_york" становится bigram, и другие пары нет. Что еще, даже если вы нашли комбинацию min_count и threshold, которая способствовала бы "machine_learning" для биграма, она также объединила бы каждый другой bigram-тот-появляется-один раз, что, вероятно, не то, что вы хотите.

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

Даже тогда, они будут склонны пропускать комбинации, которые человек сочтет разумными, и сделать комбинации человеком не будет. Зачем? Потому что наши умы имеют гораздо более сложные способы (в том числе грамматику и реальные знания) для принятия решения, когда сгустки слов представляют собой единую концепцию.

Итак, даже с более лучшими данными, будьте готовы к бессмысленным n-граммовым. Настройте или оцените модель относительно того, улучшается ли она в целом по вашей цели, а не какая-либо отдельная точка или специальная проверка соответствия вашей собственной чувствительности.

(Что касается ссылки на gensim documentation comment, я уверен, что если вы попробуете Phrases только в двух предложениях, перечисленных там, он не найдет ни одной из нужных фраз - не "new_york" или "machine_learning", В качестве образного примера, эллипсы ... подразумевают, что набор тренировок больше, и результаты показывают, что дополнительные не отображаемые тексты важны. Это просто из-за третьего предложения, которое вы добавили в свой код, который обнаружен "new_york" Если вы добавили аналогичные примеры, чтобы сделать "machine_learning" более похожим на статистически выгодное сопряжение, ваш код также может способствовать "machine_learning".)

  • 1
    Это действительно отличный ответ. Большое спасибо! :)
0

Возможно, это ниже вашего threshold?

Попробуйте использовать больше данных.

  • 0
    Спасибо за ответ. Однако я изменил свой порог на 1, 2, 3 и так далее. Но это не сработало :(
  • 2
    Используйте больше данных ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню