๋ฆฌ๋ทฐ ํ ํฐํ ํ ์๋ํด๋ผ์ฐ๋๋ฅผ ์์ฑ ์ 2๊ฐ์ง ๋ฌธ์ ๋ฅผ ํ์ธ
- ๊ธ์ ๋ถ์ ๊ตฌ๋ถ ๋ถ๊ฐ "ํฌ์ง ์๋ค" > "ํฌ๋ค" "์๋ค" ์ ํํ๋ก ํ ํฐํ๋์ด "ํฌ๋ค"์ "์๋ค"๊ฐ ๊ฐ๊ฐ ์ง๊ณ๋จ
- ๋ฆฌ๋ทฐ๋ฅผ ๋ฉํฐ๋ผ๋ฒจ ๋ถ๋ฅ๋ฅผ ํ๋ฉด ํ๋์ ๋ฆฌ๋ทฐ์ ์ฌ๋ฌ ํค์๋๊ฐ ํฌํจ๋จ "์ท์ ์งง์ง๋ง ๋์์ธ์ด ์ด๋ป์" > ๋์๋ณด๋์์ ๋์์ธ ํค์๋๋ฅผ ์ ํํ๋๋ผ๋ ๊ธธ์ด์ ๋ํ ๋ด์ฉ์ด ํจ๊ป ๋ ธ์ถ๋จ
๋ฌธ์ ํด๊ฒฐ์ ์ํด ๋ฆฌ๋ทฐ๋ฅผ ์๋ฒ ๋ฉ ๋ชจ๋ธ๋ก ๋ฒกํฐ ๋ณํํ์ฌ ๋ฒกํฐํํ ํ ํฐ๊ณผ์ ์ ์ฌ๋๋ฅผ ์ด์ฉํด ์ง๊ณ
๋์๋ณด๋์์ ์ข ๋ ์ ํํ๊ณ ์ง๊ด์ ์ธ ํ์ธ์ ํ๊ธฐ ์ํด ๊ฐ ๋ฆฌ๋ทฐ ํ ํฐ์ ์ ์ฌํ ํค์๋์ ๋งค์นญ
ํ ํฐํ ์ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ์ถ๊ฐํ์ฌ ๋ถ์ ํํ๋ฅผ ์ ์ง
- ๋์๋ณด๋ ๊ฐ์ ์ ์ํด ํ ํฐ์ ์๊ธฐ๋งค์นญํด์ผํ๋ ๋ฑ ์์์ ์ด ๋ง์
- ํนํ ๋น๋์ ์์ ํ ํฐ์ ํค์๋ ๋ถ๋ฅ๋ ๋ถ๊ฐํผํจ
- ์๋ํ๋์ง ์์ ํ๋ก์ธ์ค๋ก ์ธํ ์์์ ์ ์ค์ด๊ธฐ ์ํ ์์
1๏ธโฃํ ํฐํ
-
์ง๋ konlpy mecab ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ ์ค
- ์ ์ ๋จ์ด์ฌ์ ์ถ๊ฐ๊ฐ๋ฅ > ํญ์ ์๋ก์ด ๋จ์ด๋ ์ถ๊ฐํด์ผ ํจ
- ์๋๊ฐ ๋น ๋ฆ
- ํ์ฌ ๋งค์นญ๊น์ง ์ ์ฉ๋จ
- ์ ํ๋๊ฐ ๋ค์ ๋จ์ด์ง
#mecab '์ท', '์', '์ด์', '์ง๋ง', '๊ตฌ๊น', '์ด', '๋๋ฌด', '์', '์๊ฒจ์'
#okt '์ท', '์', '์ด์์ง๋ง', '๊ตฌ๊น', '์ด', '๋๋ฌด', '์', '์๊ฒจ์โ
#kkma '์ท', '์', '์ด์', '์ง๋ง', '๊ตฌ๊น', '์ด', '๋๋ฌด', '์', '์๊ธฐ', '์ด์โ
-
๋น์ง๋ sentencepiece ๊ณ ๋ ค(ํ์ต์ด ํ์ํจ, ํ์ฌ ๋งค์นญ์ด ์๋จ, ๋ง์ด ๋น ๋ฆ)
-
BPE
- ์๋ก์ด ๋จ์ด์ ์ถ๊ฐ ์์ด ๋น๋๊ธฐ๋ฐ ์๋์ผ๋ก ๋จ์ด์ฌ์ ํ์ฑ
- ์์ : abaa, abcd, dcdf > Aaa , Acd, dcdf
'โ์ท์', 'โ์ด์์ง๋ง', 'โ๊ตฌ๊น์ด', 'โ๋๋ฌด', 'โ์', 'โ์๊ฒจ์โ
-
wordpiece - ํ๋ฅ ๊ธฐ๋ฐ
'แแ ฉแบแแ ณแซ', 'แแ ตแแ ณแแ ตแแ กแซ', 'แแ ฎแแ ตแทแแ ต', 'แแ ฅแแ ฎ', 'แแ กแฏ', 'แแ ขแผแแ งแแ ญโ
-
-
ํ๋ฆฌํธ๋ ์ธ ํ ํฌ๋์ด์ skt kogpt2 tokenizer ํ์ต
-
sentencepiece ๊ธฐ๋ฐ ํ ํฌ๋์ด์ ๋ผ์ bpe์ ๊ฒฐ๊ณผ๊ฐ ๋น์ทํจ
# ํ์ต ์ 'โ์ท์', 'โ์ด', '์', '์ง๋ง', 'โ๊ตฌ', '๊น', '์ด', 'โ๋๋ฌด', 'โ์', 'โ์๊ฒจ', '์' # ํ์ต ํ 'โ์ท์', 'โ์ด์์ง๋ง', 'โ๊ตฌ๊น์ด', 'โ๋๋ฌด', 'โ์', 'โ์๊ฒจ์โ
๊ธฐ๋ณธ ํ ํฌ๋์ด์ ์์ ํ ํฐํํ ๊ฒฐ๊ณผ์ ๋ฆฌ๋ทฐ ํ์ต ํ ํ ํฌ๋์ด์ ์ ํ ํฐํ ๊ฒฐ๊ณผ์ฐจ์ด๊ฐ ํ์ฐ
-
2๏ธโฃ๋น๋์ ์์ ํ ํฐ ์ถ์ถ
- ๋ช ์ฌ 1์๋ ์ ๊ฑฐ
- ํ ํฐ ์ค ๋ช
์ฌ, ์ฉ์ธ ์ค ๋น๋์ ์์ ํ ํฐ ์ถ์ถ
- top p = 90% : ๋น๋์ ๋์ ํ๋ฅ 90%,
- top k = 1,000 : top p 90% ๋จ์ด์๊ฐ 1,000๊ฐ ์ด์์ผ ๊ฒฝ์ฐ
3๏ธโฃ๊ธฐ๋ณธํ ๋ณํ > ํ ํฌ๋์ด์ ์ ๋ฐ๋ผ ์ ์ฉ ๋ฐฉ๋ฒ์ด ๋ค๋ฆ
-
์ฉ์ธ ํ ๋ ๊ธ์๋ ๋์ ํ์ฉ์ฌ โ~๋คโ, ~~๋์ฌ ~ํ๋คโ~~๋ฅผ ๋ถ์
๊ผฌ๊ผฌ๋ง๊ฐ ๊ธฐ๋ณธํ ๋ณํ์ ๊ฐ์ฅ ์๋ง๋ค
4๏ธโฃ์ ์ฌํ ํฐ(์ฉ์ธ) ๊ตฐ์งํ
-
๋จ์ด๊ธฐ๋ฐ ์๋ฒ ๋ฉ ํ์ฉ
- word2vec
์ ์ฌ๋จ์ด ์ธ์ ๋จ์ด๋ ๋งค์นญ๋๋ ๋ฌธ์ ๊ฐ ์์ (์ ํ๋์ ์๊ณ๊ฐ์ด ํ์ํจ)
์๋ฒ ๋ฉ ๋ชจ๋ธ์ ๊ธธ๋ค์ ์งง๋ค๋ ๊ธธ์ด๋ฅผ ์ค์ฌ์ผ๋ก ๋งค์ฐ ์ธ์ ํ ๋จ์ด๋ผ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒฝํฅ์ด ์์ (๋ฌธ์ฅ ๊ธฐ๋ฐ ์๋ฒ ๋ฉ ๋ชจ๋ธ openai๋ roberta๋ ๋์ผํจ)
โ์ด๋ค ๋ช ์ฌ๊ฐ ๋ง์ด ์ฌ์ฉํ๋โ๋ฅผ ํ์ธํ ์ ์๋ค >๊ธธ๋ค
๊ธฐ์ฅ, ๋ฌด๋ฆ, ํ, ์๋งค
ํ ํฐ ํ ์ด๋ธ์์ ๋น๋์ ์์ ์ต์ข ์ถ๋ ฅ ํํ์ ํ ํฐ์ ์ ์ฌ ํ ํฐ ์ถ์ถ top_15
โ๋คโ ๊ฐ ๋ถ์ง ์์ ํ ํฐํ ๊ธฐ๋ณธ ์ํ๊ฐ ๋งค์นญ๋์ด ๋์ค์ ํ์ฌ์ ๊ธฐ๋ณธํ ๋ณํ ํ ํฐ์ ๋งค์นญ์ด ํ์
์ ํ๋ ๊ฐ์ ์ ์ํ ํ์ต๋ฐ์ดํฐ ์ ๋ฆฌ๊ฐ ํ์ํ ๋ฏ
๊ธฐ์กด konlpy mecab ํ ํฌ๋์ด์ ๋ฅผ ํ์ฉํ ์๋ํด๋ผ์ฐ๋๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์๋ํ์์ต๋๋ค.
- ๋ช ์ฌ๋ง ํํ์ ์ถ์ถํ๋ค. ๋์๋ณด๋ ์๋ํด๋ผ์ฐ๋์๋ ๋ช ์ฌ๋ง ๋ ธ์ถ
- ์ฃผ์๋ช ์ฌ์ ์ธ์ ํ โ๋์ฌโํ์ฉ์ฌโ ๋จ์ด๋ chatGPT๋ก ์์ฑ
- ๋ช ์ฌ+๋์ฌ ๋ฌธ์ฅ์ ์ด์ฉํ์ฌ ์๋ฒ ๋ฉ ์ ์ฌ ๋ฆฌ๋ทฐ ๊ฒ์ ์ง๊ณ
ํ์ด๋ผ์ดํธ์ ํค์๋๊ฐ ์ค๋ณต๋๋ ๋ถ๋ถ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋น๋์๊ฐ ๋์ ํ ํฐ์ ํค์๋ ๋ถ๋ฅ ๋ฐ ์ง๊ด์ ์ธ ๋ฉ์ธ์ง ์ ๋ฌ์ ์ํ ๋ฌธ์ฅ ์์ฑํ๊ณ
์์ฑ๋ ๋ฌธ์ฅ์ ์ง๊ณํ๊ธฐ ์ํด ์ค์๊ฐ ์ ์ฌ๋ ๊ฒ์ํ์ฌ ์ง๊ณํ๋ ๋ฐฉ๋ฒ์ ๊ตฌํํ์ต๋๋ค.
- ๋ชจ๋ ๋ฆฌ๋ทฐ๋ฅผ ์๋ฒ ๋ฉ๋ชจ๋ธ์ ๋ฃ์ด ๋ฒกํฐ๋ก ๋ณํ > ๋ฌธ์ฅ ์์ฑ ์ ๋ญ์ฒด์ธ ๋ฉ๋ชจ๋ฆฌ ํ์ฉ
- ๋น๋์ ๋์ ๋ช ์ฌ ์ถ์ถ ํ ๋ฉ๋ชจ๋ฆฌ ํ์ฉํ์ฌ ๋ฌธ์ฅ ์์ฑ
- ์์ฑ๋ ๋ฌธ์ฅ๋ ๋ฒกํฐ๋ก ๋ณํ ๋ฐ ํค์๋ ๋ถ๋ฅ
- ๋ง์ง๋ง์ผ๋ก ๋์๋ณด๋์์ ์ ํํ ์์ฑ ๋ฌธ์ฅ์ ์ ์ฌํ ๋ฆฌ๋ทฐ ๊ฒ์ํ์ฌ ์ง๊ณ
๋น๋์ ๋์ ๋ช ์ฌ๋ฅผ ์ถ์ถํ๋ ๊ณผ์ ์ ๋๋ค.
from preprocessing import review_tag, re90
review_tag(in_path,out_path,date)
re90(in_path,out_path)
์คํai ์๋ฒ ๋ฉ ๋ชจ๋ธ์ api ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ faiss ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ๋ ๊ณผ์ ์ ๋๋ค.
from review_embedding import Review_Embedding
review_embedding = Review_Embedding(out_path)
review_embedding.create_dataset(out_path)
review_embedding.create_index(index_path)
๋ญ์ฒด์ธ ๋ฉ๋ชจ๋ฆฌ ํ์ฉ ์ฝ๋์ ๋๋ค.
from sentence_create import Create_Sentence
nn = pd.read_csv(out_path+"re90.csv")
text = nn['token'][0]
template="""
1.๋น์ ์ ๋ช
์ฌ ๋ค์์ ์ฌ ๋์ฌ๋ ํ์ฉ์ฌ๋ฅผ ๊ตฌํ๋ ai์
๋๋ค.
2.์ต์ข
๋ํ์ ์ธ ๋์ฌ, ํ์ฉ์ฌ ์ต๋ 4๊ฐ๋ฅผ ์ถ์ถํฉ๋๋ค.
3.ํ์ฉ์ฌ๋ ๋์ฌ๋ '๋ค'๋ก ๋๋๋ ํํ๋ก ์ถ๋ ฅํฉ๋๋ค.
์์
์งง์, ์งง์์ > ์งง๋ค
๊ธธ์ด์, ๊ธด > ๊ธธ๋ค
4.๋ต๋ณ์ ๋จ๋ตํ์ผ๋ก ํฉ๋๋ค.
์์
์
๋ ฅ: ๊ธธ์ด
์ถ๋ ฅ: ์งง๋ค,๊ธธ๋ค
"""
human_template="๋ค์ ๋ช
์ฌ ๋ค์ ๋จ์ด๋ฅผ ๊ตฌํด์ค, {text}"
create_sentence = Create_Sentence(index_path,"faiss0",template,human_template)
create_sentence.create_rag(text)
๋จ์ ์์ท ๋ฌ๋ ์์ฑ์ ๋๋ค.
from sentence_create import Create_Sentence
text = "์๋ป์"
template="""
1.๋น์ ์ ํค์๋๋ฅผ ๋ถ๋ฅํ๋ ai์
๋๋ค.
2.ํค์๋ 14๊ฐ์ด๊ณ , ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
'๊ฐ๊ฒฉ','๊ธฐ๋ฅ์ฑ','๊ธธ์ด','๋์์ธ','๋ผ์ธ(ํ)','๋ง๊ฐ์ฒ๋ฆฌ','๋ฐฐ์ก','์ฌ์ด์ฆ','์์','์์ฌ','์คํ์ผ','์ ์ถ์ฑ','์ฐฉ์ฉ๊ฐ','ํ์ง'
3.๊ฐ์ฅ ์ ์ฌํ ์๋ฏธ๋ฅผ ๋ํ๋ด๋ ํค์๋๋ก ๋ถ๋ฅํฉ๋๋ค.
์์
๋ชธ์ ๋ง๋ค > ๋ผ์ธ(ํ)
๋ฐ์ง ๊ธธ๋ค > ๊ธธ์ด
4.๋ต๋ณ์ ๋จ๋ตํ์ผ๋ก ํฉ๋๋ค.
์์
์
๋ ฅ: ์ท์ด ์ด๋ป์
์ถ๋ ฅ: ๋์์ธ
"""
human_template="๋ค์ ๋ฌธ์ฅ์ ๋ถ๋ฅํด์ค, {text}"
create_sentence = Create_Sentence(index_path,"faiss0",template,human_template)
create_sentence.create(text)
์ธ์ ํ k๊ฐ์ ์ ์ฌํ ๊ฒฐ๊ณผ๋ฅผ ์ถ์ถํฉ๋๋ค. ์์นด๋ ์ ์ฌ๋ ์๊ณ๊ฐ์ 0.3์ผ๋ก ์ค์ ํ์ต๋๋ค.
from final_output import Search
search = Search(index_path,"faiss0")
txt = "๋์์ธ์ด ์๋ป์"
search.search(10,0.3,txt)