Paano Maghanap ng Mga Embedding para sa Pinakamalapit na Tugma

Paano Maghanap Ng Mga Embedding Para Sa Pinakamalapit Na Tugma



Ang paghahanap sa mga pag-embed para sa pinakamalapit na tugma ay nangangahulugan ng paghahanap sa mga pag-embed na may pinakamalapit na kahulugan sa isa't isa. Ang mga pag-embed ay ang vectorial na representasyon ng isang pangungusap na ibinibigay sa mga modelo ng wika bilang mga input para sa mga partikular na gawain. Tatalakayin natin dito ang pamamaraan at ang mga pamamaraan na maaaring magamit upang mahanap ang mga katulad na pag-embed.

Syntax

Mayroong maraming mga diskarte at tool na magagamit namin upang mahanap ang pagkakaiba sa pagitan ng mga pag-embed batay sa kanilang pagkakaiba sa mga tuntunin ng pagkakatulad. Ang mga sumusunod ay ang mga pamamaraan at ang kanilang kasangkot na syntax na gagamitin namin para sa paghahanap ng mga pagkakatulad sa pag-embed.







Mula sa mga nabanggit na punto, alam namin ang mga modelo na magagamit namin upang mahanap ang pagkakatulad na tugma para sa mga pag-embed. Ngayon, matututunan nating gamitin ang bawat isa sa mga modelong ito at ipatupad ang mga indibidwal na halimbawa sa bawat isa sa mga modelong ito.



Halimbawa 1: Pag-embed ng Pinakamalapit na Tugma sa pamamagitan ng Word Embeddings

Bago natin ipatupad ang salitang embeddings para sa similarity match, kailangan nating malaman ang tungkol sa salitang embeddings. Ang pag-embed ng salita ay ang proseso ng pag-convert ng text sa anyo ng isang vector (numerical values) dahil naiintindihan lang ng aming mga system ang input sa anyo ng mga numerical na digit.



Mayroong ilang iba pang mga paraan upang gawin ang gawaing ito na kinabibilangan ng isang mainit na pag-encode, ngunit gagamitin namin ang salitang pag-embed. Sa ganitong paraan, ang pag-embed ay natutunan ng mga modelo ng neural network (hal. word2vec o Glove) mula sa mga text. Ang mga salita ay nakamapa sa mas mataas na-dimensional na espasyo ng vector. Ang lahat ng mga salitang iyon na magkatulad sa konteksto ay nakamapa sa pinakamalapit na mga punto. Sa ganitong paraan, maaaring makuha ng mga pag-embed ang mga relasyon at ang pagkakatulad sa pagitan ng iba't ibang salita sa teksto.





Gumawa tayo ng word embed para sa isang pangungusap. Upang lumikha ng salitang pag-embed, ang Python ay nagbibigay ng 'gensim' na balangkas. Ang Gensim ay isang library package na nagbibigay-daan sa paggamit ng 'word2vec' na modelo na tumutulong sa paglikha ng mga embed. Para ipatupad ang pag-embed, tinitiyak muna naming i-install ang gensim sa aming mga compiler ng Python. Pagkatapos, mula sa gensim, ini-import namin ang modelong 'word2vec'.

Ang modelong 'word2vec' ay isang uri ng algorithm na gumagamit lamang ng dalawang input na argumento kung saan ang unang argumento ay nangangailangan ng teksto o ang pangungusap na ang pag-embed ay gusto naming gawin, at ang pangalawang argumento ay tumutukoy sa minimum na bilang na tumutukoy sa pinakamababang bilang ng beses na ang isang salita ay kinakailangan upang lumitaw o makita.



Pagkatapos i-import ang 'word2vec' na modelo, tinukoy namin ang 'text'. Kapag natukoy na namin ang text, sanayin namin ang modelong 'word2vec' na ito sa pamamagitan ng pagpasa nito kasama ng text at pagtatakda ng minimum na bilang na katumbas ng '1'. Ngayon, tinatawag namin itong sinanay na 'word2vec.wv.most_similar('consume')' na modelo at pinapakain ang salita na ang pinakamalapit na embedding ay gusto naming suriin kung saan sa halimbawang ito ay 'consume'. Upang suriin ang mga resulta ng pag-embed, ini-print namin ang output mula sa modelo:

mula sa bilang isang bansa mga modelo angkat Word2Vec
text = [ [ 'kuneho' , 'may' , 'ngipin' ] ]
modelo = Word2Vec ( text , min_count = 1 )
similar_embedding = modelo. wv . most_similar ( 'kuneho' )
print ( similar_embedding )

Sa halimbawang ito, gagawa kami ng salitang pag-embed para sa isang text gamit ang 'word2vec' na modelo upang suriin ang kanilang pagkakapareho sa mga tuntunin ng konteksto at makikita iyon sa dating naka-attach na snippet na siyang output ng code na tumitingin para sa mga katulad na pag-embed ng salitang 'kunsumo'.

Halimbawa 2: Pag-embed ng Pinakamalapit na Paghahanap sa pamamagitan ng Modelong BERT

Mayroong mga pre-trained na natural na mga modelo sa pagpoproseso ng wika na maaaring magamit upang kalkulahin ang pagkakatulad sa pagitan ng mga teksto dahil mauunawaan at matutunan nila ang kontekstwal na relasyon sa pagitan ng mga salita. Ang BERT ay isa sa mga pre-trained na modelo ng wika mula sa 'sentence_transformers' at matututunan nito ang pagkakatulad sa pagitan ng mga teksto. Upang mahanap ang pagkakatulad sa pagitan ng mga teksto, kailangan muna nating ibagay ang modelong ito sa teksto o mga pangungusap.

Kapag tapos na ito, magagamit natin ang modelong ito para matutunan ang mga pag-embed. Pagkatapos, maaari nating kalkulahin ang pagkakatulad sa pagitan ng mga teksto gamit ang function na 'cosine similarity'. Ipinapatupad namin ang halimbawang ito sa online na platform ng Python na 'google colab'. Para maayos ang modelo, ni-load namin ang (BERT) na modelo. Para sa layuning iyon, ini-install at ini-import muna namin ang 'SentenceTransformers'. Pagkatapos, nilo-load namin ang modelo mula sa pre-trained na modelo nito gamit ang SentenceTransformer. Upang i-load ang modelo, tinatawag namin ang SentenceTransformer at ang BERT na modelo sa kabuuan bilang '$SentenceTransformer('bert-base-nli-mean-tokens')' kung saan tinukoy namin ang pangalan ng pre-trained na modelo ng BERT sa input parameter at pagkatapos ay i-save namin ito sa variable na 'BERTmodel'.

Matapos naming i-load ang modelong ito, tinukoy namin ngayon ang apat na teksto, bawat isa ay binubuo ng isang pangungusap upang suriin ang pagkakatulad sa pagitan ng mga ito. Kapag natukoy na namin ang mga teksto halimbawa, ginagawa na namin ngayon ang mga pag-embed para sa tekstong ito. Isa-isa kaming gumagawa ng mga pag-embed para sa bawat isa sa teksto sa pamamagitan ng paggamit ng function na 'encode'.

Tinatawag namin ang encoding function na may prefix ng BERT model bilang 'BERTmodel.encoding ()'. Pagkatapos ay ipinapasa namin ang 'teksto' at ang 'maximum na haba' na inayos namin upang maging katumbas ng '512' sa mga parameter ng function na ito. Tinatawag namin itong encoding function sa bawat isa sa mga text, at kino-convert nito ang text sa mga embeddings.

Ngayon, ginagamit namin ang bawat isa sa mga pag-embed na ito at pinapalitan ang mga ito sa paggana ng pagkakatulad ng cosine upang mahanap ang pagkakatulad sa pagitan ng mga pag-embed na ito. Ang cosine similarity function ay malawakang ginagamit sa lahat ng natural na mga gawain sa pagproseso ng wika para sa mga klasipikasyon at clustering ng mga teksto/dokumento.

Upang mahanap ang pagkakapareho sa pagitan ng mga pag-embed na ito, ginagamit namin ang cosine similarity function at pinapalitan ang halaga ng naka-embed na pangungusap ng index na '0' at ang iba pang naka-embed na pangungusap na may '1 hanggang 3' na index upang suriin ang pagkakapareho ng pangungusap 0 sa iba pang 3 mga pangungusap. Ang mga halaga ng output ng cosine similarity function ay mula -1 hanggang 1. Dito, sinasabi ng 1 na magkapareho ang dalawang pag-embed at sinasabi ng -1 na hindi magkatulad ang dalawang embeddings. Inilakip namin ang snippet ng code na nagpapakita ng paraan para ipatupad ang function ng cosine similarity gamit ang apat na pag-embed ng pangungusap na nilikha namin sa mga halimbawa gamit ang pretrained na modelong BERT.

!pip i-install ang sentence_transformers
pangungusap = [
'apat na taon bago, puno pa ang bote at .',
'Nangarap ang aso na makatakas mula sa kulungan at sa kalye kung saan nakita niya ang kanyang kaibigan na papunta.',
'Ang tao ay naglalaro ng dikya sa loob ng maraming  buwan .',
'May nakita siyang kuhol sa kanyang wardrobe .']
mula sa sentence_transformers import SentenceTransformer
Bertmodel = SentenceTransformer('bert-base-nli-mean-tokens')
sentence_embeddings = Bertmodel.encode(mga pangungusap)
sentence_embeddings.hugis
mula sa sklearn.metrics.pairwise import cosine_similarity
# calculate=ing cosine similarity para sa pangungusap 0:
cosine_similarity(
[sentence_embeddings[0]],
sentence_embeddings[1:])

Ang array sa output ay nagpapakita ng pagkakatulad na halaga ng 'pangungusap 0' sa iba pang tatlong pangungusap, hal. 1, 2, at 3.

Konklusyon

Tinalakay namin ang mga pamamaraan upang mahanap ang pagkakatulad sa pagitan ng mga pag-embed. Nagpakita kami ng dalawang magkaibang halimbawa para hanapin ang pinakamalapit na tugma ng pag-embed gamit ang modelong gensim na 'word2vec' at ang pretrained na modelong BERT.