ML: Готовые векторы Embedding
Glove для английского языка
Для английского языка можно загрузить готовые векторизации слов c различными размерностями E_DIM = E, например Glove. Файл Glove это обычный текстовый файл, загрузка которого имеет вид:
vec = {} with open('glove.6B.100d.txt', "r", encoding='utf-8') as file: for line in file: values = line.split() vec[ values[0] ] = np.asarray(values[1:], dtype='float32')Этот файл содержит 400000 слов, отсортированных по частоте. Первые 100 приведены ниже (разделены чертой):
|the|,|.|of|to|and|in|a|"|'s|for|-|that|on|is|was|said|with|he|as|it|by|at|(|)|from|his|''| |``|an|be|has|are|have|but|were|not|this|who|they|had|i|which|will|their|:|or|its|one|after| |new|been|also|we|would|two|more|'|first|about|up|when|year|there|all|--|out|she|other| |people|n't|her|percent|than|over|into|last|some|government|time|$|you|years|if|no|world| |can|three|do|;|president|only|state|million|could|us|most|_|against|u.s.|
Векторы более частых слов имеют большую длину, чем редкие слова (гистограммы по первым и последним 5000 словам):
Если рассматривать частые и редкие слова по отдельности, то расстояние np.linalg.norm(v1-v2) между векторами убывает с ростом косинуса угла между ними (ниже по 1000 словам и объединённая картинка для частых и редких слов):
В этом смысле особой разницы между этими двумя метриками нет. Ниже приведены ближайшие соседи к данному слову по косинусной метрике $1-\cos(\mathbf{v}_1,\mathbf{v}_2)$, значение которой указано в скобках:
man: boy book ball pen woman (.17) girl (.08) books (.15) kick (.23) pencil (.39) boy (.21) man (.21) novel (.18) throw (.26) pens (.40) one (.22) kid (.22) published(.20) balls (.27) ballpoint(.40) person (.25) woman (.23) story (.21) off (.27) pens (.40) another(.25) boys (.24) author (.21) pitch (.28) old (.26) child (.25) wrote (.21) bounced(.30) france paris monday january physics belgium (.19) france (.25) tuesday (.01) december (.01) chemistry (.15) french (.20) london (.27) thursday (.01) october (.01) mathematics (.17) britain (.20) brussels (.30) wednesday(.01) february (.01) science (.21) spain (.24) french (.31) friday (.01) november (.01) biology (.21) paris (.25) rome (.31) saturday (.08) september(.02) theoretical (.27) germany (.27) amsterdam (.32) sunday (.08) june (.02) astronomy (.28) italy (.28) vienna (.34) week (.11) august (.02) sciences (.28) europe (.29) berlin (.34) earlier (.15) july (.02) biochemistry(.29) netherlands(.29) madrid (.37) afternoon(.16) april (.03) mathematical(.29) luxembourg (.32) strasbourg(.37) month (.16) march (.04) astrophysics(.31) red small hot sweet good yellow(.14) large (.07) cool (.23) delicious(.30) better(.11) blue (.16) larger (.17) cold (.27) flavor (.32) sure (.17) green (.18) smaller(.17) warm (.30) salty (.34) really(.17) black (.23) tiny (.18) heat (.32) taste (.34) kind (.17) white (.23) few (.23) soft (.34) honey (.35) very (.17) purple(.23) well (.26) dry (.34) spicy (.35) we (.18) go run give say think going (.06) running(.20) take (.12) believe(.10) know (.08) come (.07) runs (.23) make (.13) why (.13) really(.09) get (.12) ran (.25) giving (.14) n't (.13) why (.09) 'll (.12) out (.26) put (.16) want (.14) n't (.09) do (.13) go (.27) get (.18) know (.14) we (.10) take (.13) third (.27) enough (.18) what (.14) sure (.11) you (.14) allowed(.28) want (.18) not (.15) 're (.11) n't (.14) first (.28) to (.19) might (.15) maybe (.12) want (.14) second (.28) need (.19) did (.15) i (.12) let (.14) start (.28) gives (.19) think (.16) you (.12)
Забавные соседи:
apple ~ microsoft(.26), ibm (.32), intel(.32), software(.32), dell (.33) blackberry ~ iphone(.28), ipad(.30), smartphone(.32), smartphones(.35)
Векторное пространство содержит в себе некоторые семантические направления, приводящие к следующей арифметики с векторами:
man - woman + girl ~ boy (.11), man (.16), girl (0.17), kid (.22), boys (.28) woman - man + boy ~ girl (.09), boy (.14), woman (0.16), mother (.23), child (.25) uk - london + paris ~ france (.28), uk (.33)