728x90
지난 포스팅에서 더 나아가 질문을 하면, 그 질문에 비슷한 질문 문장들을 추출하고
해당 질문의 문맥과 다른 질문들도 출력하는 코드를 구현하였습니다!
def find_sentens(query, top_k ):
query_embedding = model.encode(query, convert_to_tensor=True)
cos_scores = util.pytorch_cos_sim(query_embedding, question_embeddings)[0]
cos_scores = cos_scores.cpu()
#We use np.argpartition, to only partially sort the top_k results
top_results = np.argpartition(-cos_scores, range(top_k))[0:top_k]
print("\n\n======================\n\n")
print("Query:", query)
print("\nTop 5 most similar sentences in question_list:")
for idx in top_results[0:top_k]:
print("\n*************************\n")
print(question_list[idx].strip(), "(Score: %.4f)" % (cos_scores[idx]))
tmp = str(idx)
tmp = int(tmp[7:-1])
print()
print("해당 질문의 출처는 ", tmp,"번째 문맥입니다.")
print()
con_num = df.loc[tmp]['context_index']
print(df_context.loc[con_num]['context'])
print("\n*************************\n")
print("해당 문맥의 질문들을 추출합니다.")
print()
for i in range(len(df['context_index'])):
if df['context_index'][i] == con_num:
print(df.loc[i]['question'])
print("\n\n======================\n\n")
def QA():
queries = input("질문을 입력해주세요.: ")
top_k = int(input("추출할 텍스트의 수: "))
find_sentens(queries, top_k)
## 출력결과 ##
질문을 입력해주세요.: 이순신은 어느 대첩에서 사망하였는가?
추출할 텍스트의 수: 3
======================
Query: 이순신은 어느 대첩에서 사망하였는가?
Top 5 most similar sentences in question_list:
*************************
원제신은 어디를 졸업하고 치과의사 면허를 받았는가? (Score: 0.9613)
해당 질문의 출처는 15859 번째 문맥입니다.
원세훈의 할아버지 원제순은 의사이자 재력가로 1920년대 일본에 유학, 도쿄의학전문학교를 졸업하고 귀국 후에는 다시 세브란스의학전문학교를 다녔으며 황해도 재령에 산부인과와 소아과병원을 개설했고 개성에 고령의원(高靈醫院)을 개설하여 운영하였다. 1933년 10월부터는 경상북도 고령과 1934년에는 경상남도 밀양에도 병원을 개설하여 운영하였다. 할아버지 원제순은 산부인과와 소아과를 전문으로 봤고, 1937년 영주군에 정착한 이래 1950년대 이후에는 풍기읍내 풍기사거리에서 풍기중앙병원을 운영하였다. 원세훈의 종조부 원제신(元濟莘) 역시 의사였으며 치과의사이자 군정기 때 미군정청의 공무원이었다. 원제신은 일제 강점기 당시 경성전문대학 치의학과를 졸업하고 치과의사 면허를 받았으며, 치과의사로 활동하다가 1945년 일본 패망 이후 미군정청 보건후생부 치의무국장(齒醫務局長), 보건후생부 방역대장, 치과의사 면허심사위원회 위원 겸 상임서기 등을 역임했다.
*************************
해당 문맥의 질문들을 추출합니다.
원세훈의 할아버지 원제순은 일본 유학 귀국 후 개성에 운영한 의원은?
원세훈의 증조부는 누구인가?
원제신이 일제강점기 당시 치의학과를 졸업한 학교는?
원세훈의 할아버지는 누구인가?
원제신은 어디를 졸업하고 치과의사 면허를 받았는가?
1950년대 이후 원제순이 풍기사거리에서 운영한 병원은?
원세훈 조부가 일본에서 다닌 학교는?
원세훈 조부가 개성에서 개업한 병원은?
원세훈 집안이 1937년 이래 정착한 지역은?
*************************
어머니 한혜진 여사는 어느 대학교 출신인가? (Score: 0.9595)
해당 질문의 출처는 50765 번째 문맥입니다.
그는 서울 용산구 이태원동에서 나이지리아 라고스 출신 남성인 아버지 하워드 타이투스(Howard Taitus)와 대한민국 서울 출신 한국인 어머니인 한혜진(韓慧珍) 여사 사이에서 슬하 3남 2녀 가운데 장남(長男)이자 첫째로 출생하였다. 참고로 여담이지만 그의 친가 가계 중에서도 그의 친조부(親祖父)는 나이지리아 아부자에서 출생하였고 나이지리아 라고스에서 성장한 나이지리아인이고 친조모(親祖母)는 영국 잉글랜드 지방 런던에서 출생한 영국 태생의 나이지리아 귀화 여성이다. 여하튼, 2001년 5월 19일 대한민국 서울 용산구 이태원동에서 나이지리아 라고스 출신 남성인 1966년생 아버지 하워드 타이투스(Howard Taitus)와 대한민국 서울 출생 및 1992년 서울시흥고등학교 및 1996년 경기도 화성 협성대학교 사회복지학과 출신인 1973년생 한국인 어머니 한혜진(韓慧珍) 여사 사이에서 출생한 그는 한때 2002년 1월 이후 서울 용산구 보광동에 이주하여 2005년 12월까지 3년 9개월간 서울 용산구 보광동에서 잠시 유아기를 보낸 적이 있고 이후 2005년 12월에서 2006년 2월까지 두 달여 간 충청북도 청주에서 잠시 유년기를 보낸 적이 있으며 2006년 2월 이후 서울 용산구 이태원동에 귀환하여 그 후 줄곧 이태원에서 성장하였고 2016년 서울 패션 위크 런웨이에서 패션 모델 첫 데뷔를 하였다.
*************************
해당 문맥의 질문들을 추출합니다.
한현민이 첫 데뷔한 년도는?
한현민이 2005년 12월부터 2006년 2월까지 약 두달여간 유년기를 보낸 곳은?
한현민의 아버지 이름은?
아버지 하워드 타이투스는 어디 출신인가?
어머니 한혜진 여사는 어느 대학교 출신인가?
한혜진 여사는 몇 년생인가?
하워드 타이투스는 어느 나라 출신인가?
*************************
이순신 함대와 노량에서 합류한 사람은 누구인가? (Score: 0.9587)
해당 질문의 출처는 37314 번째 문맥입니다.
이순신 함대는 8월 10일(음력 7월 4일)에 출발하여 12일(음력 7월 6일)에 노량이르렀고, 이곳에서 경상우수사 원균과 합류하였다. 이 때 적선이 출몰하였다는 첩보를 얻어 14일(음력 7월 8일) 큰배 36척 중간배 24척 작은배 13척을 만나 전투가 벌어졌다. 조선군의 연합함대는 거짓으로 후퇴하는 척하여 적들을 큰 바다로 끌어 낸 다음, 모든 군선이 일제히 학익진 진형을 갖춰 지자총통, 현자총통, 승자총통을 발포하여 적함선을 궤멸시키는 데 성공하였다. 포격으로 적함을 깨뜨린 뒤 적함의 갑판에서 백병전을 벌여 일본군을 격퇴하였으며, 여러 명의 포로들을 구해내었다. 이날 일본 수군은 큰 배 한 척, 중간 배 일곱 척, 작은 배 여섯 척만이 후방에 있어 도망을 칠 수 있었다.
*************************
해당 문맥의 질문들을 추출합니다.
이순신이 원균과 연합함대를 만들어 일본군을 크게 격퇴하였던 곳은 어디인가?
이순신이 노량에서 배를 어떤 진형으로 만들어서 일본군과 싸웠는가?
이순신 함대와 노량에서 합류한 사람은 누구인가?
조선군 연합함대가 적함선을 궤멸시키는데 사용한 진형은 무엇인가?
조선군의 연합함대는 후퇴하는 척하여 적을 큰 바다로 유인하고, 모든 군선이 어떤 진형을 갖췄습니까?
일본 수군은 큰 배 한 척과 중간 배 일곱 척, 작은 배 몇 척이 후방에 있었습니까?
======================
해당 코드에서는 문장 자체에서 질문과 질문간의 유사도를 판별하고 가장 유사도가 높은 문장들을 추출한다.
하지만, 출력결과에서 볼 수 있듯 유사도가 높다고 보기에는 애매하다.
핵심 키워드와 거리가 멀기때문이다..
해당 질문에서 키워드를 제대로 인식하여 질문-질문에서 키워드-키워드 간 유사도를 검증해야할 것 같다.
728x90
'공부정리 > NLP' 카테고리의 다른 글
[NLP] Pororo 언어 모델 기반 문장 토큰 분류 (0) | 2022.10.20 |
---|---|
[NLP] Sentence transformer를 이용하여 텍스트 유사도 구하기 with korQuad Dataset - (3) 명사 추출 (1) | 2022.10.18 |
[NLP] Fine Turning - Hugging face (0) | 2022.10.18 |
[NLP] Sentence transformer를 이용하여 텍스트 유사도 구하기 with korQuad Dataset (1) | 2022.10.14 |
[NLP] 자연어 처리를 위한 데이터 셋 모음 (0) | 2022.10.14 |