見出しと記事本文のセマンティック検索
tldrstory は、ストーリーに関連する見出しとテキスト コンテンツのセマンティック検索アプリケーションです。 tldrstory はテキストにゼロショット ラベルを適用します。これにより、コンテンツを動的に分類できます。このフレームワークは、テキストの類似性検索を可能にする txtai インデックスも構築します。カスタマイズ可能な Streamlit アプリケーションと FastAPI バックエンド サービスにより、ユーザーは処理されたデータを確認および分析できます。
tldrstory には、この README の概念などを説明する対応する Medium 記事があります。それをチェックしてください!
次のリンクは、tldrstory で構築されたサンプル アプリケーションです。
最も簡単なインストール方法は、pip と PyPI を使用することです。
pip install tldrstory
tldrstory を GitHub から直接インストールすることもできます。 Python 仮想環境の使用をお勧めします。
pip install git+https://github.com/neuml/tldrstory
Python 3.8以降がサポートされています
環境固有のインストールの問題を解決するには、このリンクを参照してください。
インストールしたら、アプリケーションを実行するように構成する必要があります。 tldrstory アプリケーションは、次の 3 つの個別のプロセスで構成されます。
「スポーツニュース」アプリの起動方法を説明します。
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]
上の例では、カテゴリ「トピック」を 2 つのラベル「ラベル 1」と「ラベル 2」で構成しています。ここでは任意のラベルを設定でき、大規模な 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
2 つのラベル ポイントをグラフ化する散布図の構成を可能にします。このチャートを使用して、適用されたラベルをプロットし、色を適用することができます。
" column name " : dynamic range of coloring
結果の詳細を示すデータテーブル。このセクションでは、デフォルトの列に加えて、適用されたゼロショット ラベルに基づいて追加の列を追加できます。デフォルトのモードではラベルの数値が表示されますが、テキスト ラベルの範囲を適用することもできます。
例えば:
上記では、値が 0 ~ 5 の場合、テキスト「ラベル 1」が赤色で出力されます。値が 5 ~ 10 の場合、テキスト「ラベル 2」が緑色で出力されます。