Использование Word2Vec для решения проблем многозначности

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

Сначала давайте изменим исходный DataFrame, чтобы добавить строку с данными [3, 10].

df1 = pd.DataFrame(data = {'col1' : [1, 2, 3, 4, 5, 3], 
                           'col2' : [10, 11, 12, 13, 14, 10]}) 
df2 = pd.DataFrame(data = {'col1' : [1, 2, 3],
                           'col2' : [10, 11, 12]})

df1

   col1  col2
0     1    10
1     2    11
2     3    12
3     4    13
4     5    14
5     3    10

df2

   col1  col2
0     1    10
1     2    11
2     3    12

Выполните левое объединение, исключая дубликаты в df2, чтобы каждая строка df1 соединяется ровно с одной строкой df2. Используйте параметр indicator, чтобы вернуть дополнительный столбец, указывающий, из какой таблицы была строка.

df_all = df1.merge(df2.drop_duplicates(), on=['col1','col2'], 
                   how='left', indicator=True)
df_all

   col1  col2     _merge
0     1    10       both
1     2    11       both
2     3    12       both
3     4    13  left_only
4     5    14  left_only
5     3    10  left_only

Создать логическое условие:

df_all['_merge'] == 'left_only'

0    False
1    False
2    False
3     True
4     True
5     True
Name: _merge, dtype: bool

Почему другие решения неверны

Несколько решений делают ту же ошибку - они только проверяют, что каждое значение независимо в каждом столбце, а не в одной строке. Добавление последней строки, которая является уникальной, но имеет значения из обоих столбцов из df2, выдает ошибку:

common = df1.merge(df2,on=['col1','col2'])
(~df1.col1.isin(common.col1))&(~df1.col2.isin(common.col2))
0    False
1    False
2    False
3     True
4     True
5    False
dtype: bool

Это решение получает тот же неправильный результат

df1.isin(df2.to_dict('l')).all(1)
0
задан r1d1 13 July 2018 в 17:57
поделиться

1 ответ

(1) Вы выбираете требуемую размерность в качестве метапараметра модели. Строгие проекты с достаточным временем могут попробовать разные размеры, чтобы увидеть, что лучше всего подходит для их качественных оценок.

(2) Отдельные размеры / элементы каждого слова-вектора (числа с плавающей запятой) в ванильном слове2vec нелегко интерпретировать. Это всего лишь расположение слов в целом, которые имеют полезность - размещение похожих слов рядом друг с другом, а относительные направления (например, «к« королеве »от« короля ») соответствуют человеческим интуициям о категориях / непрерывных свойствах. И поскольку алгоритмы используют явную рандомизацию, а оптимизированная многопоточная операция вводит случайную задачу планирования потоков в примеры обучения, даже те же самые данные могут приводить к разным (но одинаково хорошим) векторным координатам из run- для запуска.

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

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

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

Эта статья управляет впечатляющей работой по обнаружению альтернативных чувств посредством постобработки нормальных векторов word2vec.

1
ответ дан gojomo 17 August 2018 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: