Я пытаюсь реализовать версию кластеров Брауна для серии текстов обзоров (SemEval 2014). Я использую общедоступные твиттер-кластеры Owoputi et al. (2013). Они выглядят следующим образом:
0000 ijust 1446
0000 i 17071657
0000 -i 4254
000100 iyou 41
000100 #innowayshapeorform 41
, где битовая строка указывает на кластер, а есть 1000 кластеров.
Я извлек в словарь, где у меня есть соответствующая битовая строка в качестве ключа и список токенов в качестве значения: например,
{'0000': ['ijust', 'i', '-i'], '000100': ['iyou', #innowayshapeorform] ...}
Мне просто не хватает части того, как одним горячим кодированием текста сопоставлять ключи словаря с индексами в векторе (1d массив):
таким образом, что если слово встречается в тексте И слово встречается в кластере, значение для кластера изменяется с 0 на 1.
например one_hot_vector = [0] * 3
- кластер 1 (индекс вектора = 0): ['Я', 'я', 'мой', 'мой']
- кластер 2 (индекс вектора = 1): [ «люблю», «нравится», «хочу», «нужно»]
- кластер 3 (индекс вектора = 2): [«собаки», «домашние животные», «кошки», «щенки»]
текст 1: я ненавижу кошек
текст 1 векторное представление: [1,0,1]
текст 2: собаки любят меня
текст 2 векторное представление: [1,1,1]
текст 3: I dr овец
текст 3 векторное представление: [1,0,0]
в этом примере 3 кластера - кластеры, которые у меня будут, будут иметь длину 1000 измерений.