QA 데이터베이스 구축



이 문서는 AI 기반 시맨틱 검색 플랫폼인 txtai에 대한 자습서 시리즈의 일부입니다.

txtai은 머신 러닝 워크플로를 실행하여 데이터를 변환하고 AI 기반 시맨틱 검색 애플리케이션을 구축합니다.

대화형 AI는 잠재적으로 많은 고객 서비스 산업을 자동화할 수 있는 성장하는 분야입니다. 완전 자동화는 아직 멀었지만(대부분의 우리는 자동 상담원과 통화 중이었고 사람에게 연락하기를 원했습니다) 확실히 사람이 개입하기 전에 확실한 첫 번째 라인이 될 수 있습니다.

이 기사는 txtai 임베딩 인스턴스를 사용하여 사용자 질문에 답변하는 프로세스를 제시합니다. 대화형 AI가 아니라 사용자 질문에 가장 가까운 기존 질문을 찾습니다. 이것은 자주 묻는 질문 목록이 있는 경우에 유용합니다.

종속성 설치


txtai 및 모든 종속성을 설치합니다.

pip install txtai datasets


데이터 세트 로드



이 예에서는 웹 질문의 Hugging Face 데이터 세트를 사용합니다. 데이터 세트에는 질문과 답변 목록이 있습니다. 아래 코드는 데이터 세트를 로드하고 몇 가지 예를 인쇄하여 데이터 형식을 파악합니다.

from datasets import load_dataset

ds = load_dataset("web_questions", split="train")

for row in ds.select(range(5)):
  print(row["question"], row["answers"])



what is the name of justin bieber brother? ['Jazmyn Bieber', 'Jaxon Bieber']
what character did natalie portman play in star wars? ['Padmé Amidala']
what state does selena gomez? ['New York City']
what country is the grand bahama island in? ['Bahamas']
what kind of money to take to bahamas? ['Bahamian dollar']


인덱스 생성



다음으로 txtai 인덱스를 생성합니다. 질문은 인덱싱된 텍스트입니다. 또한 쿼리 시간에 답변에 액세스할 수 있도록 전체 콘텐츠를 저장합니다.

from txtai.embeddings import Embeddings

# Create embeddings index with content enabled. The default behavior is to only store indexed vectors.
embeddings = Embeddings({"path": "sentence-transformers/nli-mpnet-base-v2", "content": True})

# Map question to text and store content
embeddings.index([(uid, {"url": row["url"], "text": row["question"], "answer": ", ".join(row["answers"])}, None) for uid, row in enumerate(ds)])


질문하기



이제 인덱스가 구축되었으므로 몇 가지 질문을 해보자! txtai SQL을 사용하여 반환하려는 필드를 선택합니다.

질문 목록과 가장 일치하는 질문-답변 콤보를 참조하십시오.

def question(text):
  return embeddings.search(f"select text, answer, score from txtai where similar('{text}') limit 1")

question("What is the timezone of NYC?")



[{'answer': 'North American Eastern Time Zone',
  'score': 0.8904051184654236,
  'text': 'what time zone is new york under?'}]



question("Things to do in New York")



[{'answer': "Chelsea Art Museum, Brooklyn Bridge, Empire State Building, The Broadway Theatre, American Museum of Natural History, Central Park, St. Patrick's Cathedral, Japan Society of New York, FusionArts Museum, American Folk Art Museum",
  'score': 0.8308358192443848,
  'text': 'what are some places to visit in new york?'}]



question("Microsoft founder")



[{'answer': 'Bill Gates',
  'score': 0.6617322564125061,
  'text': 'who created microsoft windows?'}]



question("Apple founder university")



[{'answer': 'Reed College',
  'score': 0.5137897729873657,
  'text': 'what college did steve jobs attend?'}]



question("What country uses the Yen?")



{'answer': 'Japanese yen',
  'score': 0.6663530468940735,
  'text': 'what money do japanese use?'}]



question("Show me a list of Pixar movies")



[{'answer': "A Bug's Life, Toy Story 2, Ratatouille, Cars, Up, Toy Story, Monsters, Inc., The Incredibles, Finding Nemo, WALL-E",
  'score': 0.653051495552063,
  'text': 'what does pixar produce?'}]



question("What is the timezone of Florida?")



[{'answer': 'North American Eastern Time Zone',
  'score': 0.9672279357910156,
  'text': 'where is the time zone in florida?'}]



question("Tell me an animal found offshore in Florida")



[{'answer': 'Largemouth bass',
  'score': 0.6526554822921753,
  'text': 'what kind of fish do you catch in florida?'}]


나쁘지 않아! 이 데이터베이스에는 6,000개 이상의 질문-답변 쌍만 있습니다. 품질을 개선하기 위해 쿼리에 점수 필터를 적용하여 매우 신뢰할 수 있는 답변만 반환할 수 있습니다. 그러나 이것은 무엇이 가능한지에 대한 아이디어를 제공합니다.

애플리케이션으로 실행



이것은 또한 응용 프로그램으로 실행할 수 있습니다. 아래를 참조하십시오.

from txtai.app import Application

# Save index
embeddings.save("questions.tar.gz")

# Build application and index data
app = Application("path: questions.tar.gz")

# Run search query
app.search("select text, answer, score from txtai where similar('Tell me an animal found offshore in Florida') limit 1")[0]



{'answer': 'Largemouth bass',
 'score': 0.6526554822921753,
 'text': 'what kind of fish do you catch in florida?'}


마무리



이 기사에서는 간단한 질문 매칭 서비스를 소개했습니다. 이것은 자동화된 고객 서비스 에이전트 및/또는 온라인 FAQ의 기초가 될 수 있습니다.

전체 예는 사용자 질문을 스택 오버플로 질문-답변 쌍과 일치시키는 애플리케이션인 codequestion 을 참조하십시오.

좋은 웹페이지 즐겨찾기