헤드라인 및 스토리 텍스트에 대한 의미론적 검색
tldrstory는 스토리와 관련된 헤드라인 및 텍스트 콘텐츠에 대한 의미 검색 애플리케이션입니다. tldrstory는 텍스트에 제로샷 라벨링을 적용하여 콘텐츠를 동적으로 분류할 수 있습니다. 이 프레임워크는 또한 텍스트 유사성 검색을 가능하게 하는 txtai 인덱스를 구축합니다. 사용자 정의 가능한 Streamlit 애플리케이션과 FastAPI 백엔드 서비스를 통해 사용자는 처리된 데이터를 검토하고 분석할 수 있습니다.
tldrstory에는 이 README 등의 개념을 다루는 해당 Medium 기사가 있습니다. 확인해 보세요!
다음 링크는 tldrstory로 구축된 예제 애플리케이션입니다.
가장 쉬운 설치 방법은 pip와 PyPI를 이용하는 것입니다.
pip install tldrstory
GitHub에서 직접 tldrstory를 설치할 수도 있습니다. Python 가상 환경을 사용하는 것이 좋습니다.
pip install git+https://github.com/neuml/tldrstory
Python 3.8+가 지원됩니다.
환경별 설치 문제를 해결하려면 이 링크를 참조하세요.
일단 설치되면 애플리케이션이 실행되도록 구성해야 합니다. tldrstory 애플리케이션은 세 가지 개별 프로세스로 구성됩니다.
이 섹션에서는 "스포츠 뉴스" 애플리케이션을 시작하는 방법을 보여줍니다.
mkdir sports
wget https://raw.githubusercontent.com/neuml/tldrstory/master/apps/sports/app.yml -O sports/app.yml
wget https://raw.githubusercontent.com/neuml/tldrstory/master/apps/sports/api.yml -O sports/api.yml
wget https://raw.githubusercontent.com/neuml/tldrstory/master/apps/sports/index-simple.yml -O sports/index.yml
wget https://raw.githubusercontent.com/neuml/tldrstory/master/src/python/tldrstory/app.py -O sports/app.py
python -m tldrstory.index sports/index.yml
CONFIG=sports/api.yml API_CLASS=tldrstory.api.API uvicorn " txtai.api:app " &
streamlit run sports/app.py sports/app.yml " Sports " " ? "
기본적으로 tldrstory는 RSS 및 Reddit API에서 데이터 읽기를 지원합니다. 추가 데이터 소스를 정의하고 구성할 수 있습니다.
다음은 사용자 정의 데이터 소스 정의의 예를 보여줍니다. neuspo는 실시간 스포츠 이벤트 및 뉴스 어플리케이션입니다. 이 데이터 소스는 사전 정의된 항목 4개를 기사 데이터베이스에 로드합니다.
from tldrstory . source . source import Source
class Neuspo ( Source ):
"""
Articles have the following schema:
uid - unique id
source - source name
date - article date
title - article title
url - reference url for data
entry - entry date
"""
def run ( self ):
# List of articles created
articles = []
articles . append ( self . article ( "0" , "Neuspo" , self . now (), "Eagles defeat the Giants 22 - 21" ,
"https://neuspo.com/stream/34952e3919d685982c17735018b0197f" , self . now ()))
articles . append ( self . article ( "1" , "Neuspo" , self . now (), "Giants lose to the Eagles 22 - 21" ,
"https://t.co/e9FFgo0wgR?amp=1" , self . now ()))
articles . append ( self . article ( "2" , "Neuspo" , self . now (), "Rays beat Dodgers 6 to 4" ,
"https://neuspo.com/stream/6cb820b3ebadc086aa36b5cc4a0f575d" , self . now ()))
articles . append ( self . article ( "3" , "Neuspo" , self . now (), "Dodgers drop Game 2, 6-4" ,
"https://t.co/1hEQAShVnP?amp=1" , self . now ()))
return articles
neuspo를 데이터 소스로 사용하여 위의 단계를 다시 실행해 보겠습니다. 먼저 sports/data 디렉토리를 제거하여 새로운 데이터베이스를 생성하세요. 그런 다음 위의 요점을 스포츠 디렉토리에 다운로드할 수 있습니다.
# Delete the sports/data directory before running
wget https://gist.githubusercontent.com/davidmezzetti/9a6064d9a741acb89bd46eba9f906c26/raw/7058e97da82571005b2654b4ab908f25b9a04fe2/neuspo.py -O sports/neuspo.py
sports/index.yml을 편집하고 rss 섹션을 제거하세요. 다음으로 교체하세요.
# Custom data source for neuspo
source : sports.neuspo.Neuspo
이제 위 지침의 2~4단계를 다시 실행하세요.
다음 섹션에서는 tldrstory 애플리케이션의 일부인 각 프로세스에 대한 구성 매개변수를 정의합니다.
콘텐츠의 인덱싱을 구성합니다. 현재 Reddit API, RSS 및 사용자 정의 사용자 정의 소스를 통해 데이터 가져오기를 지원합니다.
name : string
애플리케이션 이름
schedule : string
인덱싱 작업의 예약 실행을 활성화하는 Cron 스타일 문자열입니다. cron 문자열에 대한 자세한 내용은 이 링크를 참조하세요.
데이터 소스 구성.
reddit.subreddit : name of subreddit to pull from
reddit.sort : sort type
reddit.time : time range
reddit.queries : list of text queries to run
일련의 Reddit API 쿼리를 실행합니다. 이 방법이 작동하려면 Reddit API 키를 생성하고 구성해야 합니다. 인증 매개변수는 환경 내에서 또는 praw.ini 파일에서 설정할 수 있습니다. Reddit API 계정 설정에 대한 자세한 내용은 이 링크를 참조하세요. 읽기 전용 액세스만 있으면 됩니다.
쿼리 설정을 구성하는 방법에 대한 자세한 내용은 PRAW 설명서를 참조하세요.
rss : list of RSS urls
일련의 RSS 피드를 읽고 발견된 각 기사 링크에 대한 기사를 작성합니다.
source : string
사용자 정의 소스를 구성합니다. 이 매개변수는 전체 클래스 경로를 문자열로 사용합니다(예: "tldrstory.source.rss.RSS").
사용자 정의 소스는 날짜, 텍스트 문자열 및 참조 URL이 있는 모든 데이터를 사용할 수 있습니다. 사용자 정의 소스를 생성하는 방법에 대한 자세한 내용은 source.py의 설명서를 참조하세요. rss.py 및 reddit.py는 구현 예입니다.
ignore : list of url patterns
무시할 URL 패턴 목록입니다. 문자열과 정규식을 지원합니다.
labels : dict
제로샷 분류기의 라벨 구성입니다. 이 구성은 주제 값 목록과 함께 카테고리를 설정합니다.
예:
labels :
topic :
values : [Label 1, Label 2]
위의 예에서는 "Label 1"과 "Label 2"라는 두 가지 가능한 레이블을 사용하여 "Topic" 범주를 구성합니다. 여기에서 모든 레이블을 설정할 수 있으며 대규모 NLP 모델을 사용하여 입력 텍스트를 해당 레이블로 분류합니다.
path : string
모델 출력을 저장할 위치, 경로가 아직 존재하지 않는 경우 생성됩니다.
embeddings : dict
주제 검색에 사용되는 txtai 인덱스를 구성합니다. 이에 대한 자세한 내용은 txtai 구성을 참조하세요.
인덱싱된 데이터를 가져오기 위해 FastAPI 지원 인터페이스를 구성합니다.
path : string
모델 인덱스의 경로입니다.
기본 애플리케이션은 Streamlit에 의해 구동되고 YAML 구성 파일에 의해 구동됩니다. 구성 파일은 애플리케이션 이름, 콘텐츠 가져오기를 위한 API 엔드포인트 및 구성 요소 구성을 설정합니다. 이 대신 사용자 정의 Streamlit 애플리케이션이나 다른 애플리케이션을 사용하여 API 엔드포인트에서 콘텐츠를 직접 가져올 수 있습니다.
name : string
애플리케이션 이름
api : url
콘텐츠를 가져오기 위한 API 엔드포인트입니다.
description : string
사이드바 설명을 작성하는 데 사용되는 마크다운 문자열입니다.
queries.name : Queries drop down header
queries.values : List of values to use for queries drop down
쿼리 드롭다운 상자를 구성합니다. 사용할 미리 준비된 쿼리 목록이어야 합니다. "최신" 값이 있으면 마지막 N개 기사를 쿼리합니다. "--Search--" 값이 있으면 사용자 정의 쿼리를 입력할 수 있는 다른 텍스트 상자가 표시됩니다.
filters : list
슬라이더 필터 목록입니다. 이는 인덱싱 섹션에 구성된 제로샷 레이블에 매핑되어야 합니다.
chart.name : Chart name
chart.x : Chart x-axis column
chart.y : Chart y-axis column
chart.scale : Color scale for list of colors
chart.colors : List of colors
두 개의 레이블 지점을 그래프로 표시하는 분산형 차트를 구성할 수 있습니다. 이 차트를 사용하여 적용된 레이블에 색상을 플롯하고 적용할 수 있습니다.
" column name " : dynamic range of coloring
결과 세부정보를 보여주는 데이터 테이블입니다. 기본 열 외에도 이 섹션에서는 적용된 제로샷 레이블을 기반으로 추가 열을 추가할 수 있습니다. 기본 모드는 레이블의 숫자 값을 표시하는 것이지만 텍스트 레이블 범위도 적용할 수 있습니다.
예를 들어:
위의 경우 0에서 5 사이의 값에 대해 "Label 1"이라는 텍스트가 빨간색으로 출력됩니다. 5에서 10 사이의 값은 녹색으로 "Label 2"라는 텍스트를 출력합니다.