Используйте tf-idf с векторами FastText - PullRequest
2 голосов
/ 23 сентября 2019

Я заинтересован в использовании tf-idf с библиотекой FastText, но нашел логический способ обработки нграмм.Я уже использовал tf-idf с векторами SpaCy для того, что нашел несколько примеров, подобных этим:

Но для библиотеки FastText мне это не совсем понятно, поскольку она имеет не очень интуитивную гранулярность, например, EG

Для общего слова 2vecу меня будет один вектор для каждого слова, я могу посчитать частоту этого вектора и соответственно разделить его значение.

Но для fastText одно и то же слово будет иметь несколько n-граммов,

"Слушать последние сводки новостей" будет иметь n-граммы, генерируемые скользящими окнами, например:

lis ist ste ten tot het ...

Эти n-граммы обрабатываются внутри модели, поэтому, когда я пытаюсь:

model["Listen to the latest news summary"] 

, я получаю конечный вектор напрямую, отсюда то, что у меня естьхотя нужно разделить текст на n-граммы перед подачей модели, например:

model['lis']
model['ist']
model['ten']

и сделать tf-idf оттуда, но это кажется неэффективным подходом к обоим, есть ли стандартный способ примененияTF-IDF для вектора N-грамм, как это.

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

Я бы оставил FastText иметь дело с триграммами, но продолжал строить tfidf -взвешенные вложения на уровне слов.

То есть вы отправляете

model["Listen"]
model["to"]
model["the"]
...

в FastText изатем используйте ваш старый код для получения весов tf-idf.

В любом случае было бы хорошо узнать, учитывает ли сам FastText конструкцию word при обработке предложения, или это действительноработает только как последовательность триграмм (смешение последовательных слов).Если последнее верно, то для FastText вы потеряете информацию, разбив предложение на отдельные слова.

0 голосов
/ 30 сентября 2019

Насколько я понял из вашего вопроса, вы путаете разницу между методами встраивания слов (такими как word2vec и многие другие) и Tf-Idf:

  • В основном Вложения слов Методы являются неконтролируемыми моделями для генерации векторов слов.Векторы слов, генерируемые этими моделями, сейчас очень популярны в задачах NPL.Это связано с тем, что в представлении слова, встраивающем слово, содержится больше информации о слове, чем просто однозначное представление слова, поскольку первое отражает семантическое сходство этого слова с другими словами
    , тогда как последнее представление слова являетсяравноудаленный от всех других слов.FastText - это еще один способ реализации встраивания слов (недавно открытый исследователем facebook).
  • Tf-idf , вместо этого представляет собой схему подсчета слов, которая измеряет, насколько важно словок документу.

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

В отличие от Word2Vec, который изучает векторное представление всего слова , FastText выучить представление для каждого n-грамма слова, как вы уже видели.Таким образом, общее вложение слов является суммой представления n-граммы.По сути, это модель FastText (количество n-грамм> количество слов), она работает лучше, чем Word2Vec, и позволяет соответствующим образом представлять редкие слова.

Для моей точки зрения в целом Это не имеет смысла использовать FastText (или любые методы вложения слов) вместе с Tf-Idf.Но если вы хотите использовать Tf-Idf с FastText, вы должны сложить все n-граммы, составляющие ваше слово, и использовать это представление для вычисления Tf-Idf.

...