全国に53店舗を展開するオーディオ専門の買取業者「オーディオサウンド」。本稿では、同社の行う「出張買取」についてメールでのスタッフインタビューを実施。サービスを通じてユーザーに寄り添う姿勢を紹介する。
Source link
Views: 0
全国に53店舗を展開するオーディオ専門の買取業者「オーディオサウンド」。本稿では、同社の行う「出張買取」についてメールでのスタッフインタビューを実施。サービスを通じてユーザーに寄り添う姿勢を紹介する。
Source link
Views: 0
ドキュメントナビゲーションにジャンプします
これがオリジナルのクリップです YouTube グレッグブロックマンはそれを見せてくれます。最終的にGPT-4はHTML出力を生成し、Gregはそれを披露するためにCodepenにコピーしました。
なんて大きなリリースでしょう! ショーン・ワンはノートします:
これがどれほど予想されていたかについての簡単な測定値を使用するために、GPT-4はすでに11番目に投票されたハッカーニュースストーリーです いつも、 開発者のライブストリームは、20時間で150万回の視聴を獲得しました(現在はYouTubeのすべてで5位トレンドビデオ)と発表 ツイート ChatGptの場合は、2022年の最大のストーリーであるChatGptよりも4倍のいいねを得ました。
確かに、このコード・フォー・ミー・アングルは人々とクリックしています!
私はGPT-4に飛び込んで尋ねました:
ボタンをクリックしてランダムなウィキペディアページに移動するHTMLページを作成します
これは実際にかなりうまく機能します:
私はそれについて知りません Arial
そこに選択肢がありますが、そうでなければ、よくできました。
私は最初に「絵を描く」ことを試してみたいと思っていましたが、 どうやら、それはまだ私たちにはまったく開かれていません。
ChatGptが優れた作業コードを作成した例をもっと見たい場合は、 ここにコレクションがあります。
Views: 0
量子もつれは時間を超えるのでしょうか?
英国のケンブリッジ大学(University of Cambridge)で行われた2023年の研究では、量子の世界では未来で行われる観測の力で、過去の観測結果をタイムトラベルしたかのように捻じ曲げられることが示されています。
SFでは、過去を変えるためにタイムマシンに乗って過去の世界に行くことがあります。
これまでの研究では、そのような時間遡行が行われた場合に使用される原理や、祖父殺しのパラドックスを避ける方法などが考察されてきました。
一方、この研究では「量子もつれのシステムがタイムトラベルだった場合」を想定したシミュレーションが行われており、粒子が時間を遡行できた場合に何が起こるかが調べられました。
結果、量子もつれの操作によって、時間遡行のような結果を導けることが示されたという。
研究者たちはプレスリリースにて「ギャンブラーや投資家たちも、場合によっては過去の行動を遡って変更し、現在の結果を改ざんできる」と述べています。
しかし、なぜ量子もつれはタイムトラベルのような現象を引き起こせるのでしょうか?
研究内容の詳細は2023年10月12日に『Physical Review Letters』にて公開されました。
目次
ギャンブルや投資をする人々は、しばしば、後から考えると最適とは言い難い行動をとってしまいます。
どんな選択が最適で、最終的な結果がどんなものかは、多くの場合、全てが終了した後でなければわかりません。
ギャンブルや投資を行う段階でもある程度の情報は存在しますが、未来になって得られる確かな情報と比べると、弱い情報であると言わざるを得ません。
私たちの世界では、時間の矢は常に一方に流れているため、未来人でもない限り、未来の情報を使って過去で儲けることはできません。
しかし量子の世界では、時間は思ったほど頑固ではありません。
量子の世界でも「原因と結果」を繋げる因果律は存在しますが、原因と結果の関係は私たちが知る常識とは異なり曖昧です。
量子の世界では原因が結果を導くだけでなく、結果が原因に干渉するかのような、奇妙な挙動が見られる場合があるのです。
その代表的な現象が「量子もつれ」です。
現実世界の男女カップルのそれぞれが東京と大阪にランダムに配置されるとき、東京にいるのが男性ならば、大阪にいるのは女性であることが確定します。
男女のどちらが東京にいるかは、観測されようとされまいと既に決まっており、観測はそれを確定させる手段に過ぎません。
しかし両者の間で量子もつれが起こると、状況は大きく変わります。
観測が行われる前の段階では、男性あるいは女性がどちらにいるかの情報は、まだ確定していません。
観測が行われてはじめて、東京にいるのが男性という情報が生成され、その影響は瞬時に伝達(テレポート)されて「大阪にいるのは女性」という情報が生成されます。
「観測されるまで情報が存在しない」というと奇妙に思えるでしょう。
実際、アインシュタインのような天才物理学者も、かつてはこの考えにどうしても賛同できなかったことが知られています。
しかし多くの実験が行われた結果、本当であることが判明し、証明に携わった研究者たちはノーベル物理学賞を受賞しました。
ですが量子もつれの奇妙さはこれだけではありません。
量子もつれには時間軸においても常識外れの現象、すなわちタイムトラベルを思わせる挙動が知られているからです。
たとえば一方が右回転ならば他方は左回転という、量子もつれにある2つの粒子Aと粒子Bが用意され「粒子A」だけを友達に送ったとします。
そして手元に残った「粒子B」に対して、量子もつれを破壊しない程度の、弱い測定を行います。
すると粒子Bに関して、回転方向を示すいくつかの観測結果が得られます。
(※なおここでは粒子Bは左回りの可能性が高いとします)
また観測の方法は何通りも存在しており、ときには9割9分の確率で粒子Bが左回りという結果が得られることもあります。
こうなると(当然ながら)友人に送られた粒子Aは、右回りの可能性が高くなります。
通常のギャンブルならば、この1度目の観測で「ほぼ確定」と判断し、お金を賭ける人もいるでしょう。
しかし粒子Bが自分の手元にあるなら、この結果を覆すことが可能です。
粒子Bが左回転である証拠が数多く得られていても、量子もつれが破壊されておらず、まだ宇宙にはどちらが右回転か左回転かの情報は存在していないからです。
そのため、ある意味でインチキのような手法が可能になります。
1度目の観測が終了した後、粒子Bの観測から得られた情報などをもとに、絶対に粒子Bが右回転という「1度目と逆の結果」しか得られない観測装置を作成し、2回目の観測を行うのです。
2回目の観測が1度目の観測と違うのは、2回目の観測が量子もつれを破壊するのに十分な威力を持っている点にあります。
そのため事前に9割9分左回転という結果を得ていても、この八百長まがいの装置を通して観測された粒子Bは必ず右回転になってしまいます。
すると友達の元では、粒子Aが左回転として生成され、確定することになります。
つまり2回目(未来)に行った観測が、1回目(過去)に行った観測の結果を変えてしまったのです。
1回目の過去に行った観測がどんなに精度が高くても、2回目の未来に行った観測を恣意的に行うことで、最終的な結果をコントロールできるのです。
宇宙に情報が出現する前の観測結果は、どんなに奇妙でも、因果律を脅かす存在にはなりません。
そのため、理屈の上では因果律は崩れずに済みます。
この実験結果は量子力学の中でも特に直感に反する現象として考えられています。
そこで今回、ケンブリッジ大学の研究者たちは、量子もつれが持つ曖昧さについて、新たな検証を行うことにしました。
この未来の観測が過去の観測結果を変えてしまうという結果を、本当にタイムトラベルが可能であると仮定した場合でシミュレートしてみたのです。
実際のシミュレーションでは、上のような時間遡行可能な量子もつれ回路が形成されました。
すると、4回に1回の確率で、未来で行った恣意的な観測によって、過去の測定結果を変更できることが示されました。
そのため研究者たちは、過去に起こった出来事を未来に変更することは、物理学の法則に違反しないと結論しました。
また研究者たちはこの結果について、プレゼントを贈る場合を例に説明しています。
友達にプレゼントを贈るのに3日かかるとすると、3日後に届くには必ず1日目に送る必要があります。
ただし、友達が本当に欲しいものを記した「欲しいものリスト」が公開されるのが2日目になってからだとします。
そうなると、普通はもう手遅れです。
しかし量子もつれの仕組みをタイムトラベルに見立てて利用した場合、計算上、25%の確率で既に送ったはずのプレゼントの中身を変更できるのです。
その方法は、先に述べた通り、量子もつれにある手元に残った粒子Bに対する、恣意的な観測です。
たとえばズボンとシャツのプレゼントボックスが量子もつれにあるとき、友達が欲しいものがズボンなのにシャツを送ってしまった場合、手元に残ったズボンが絶対にズボンにならない観測装置を使うと、25%の確率で内容が変更され、友達にズボンが届くようになるのです。
量子もつれにある両者に対する観測の方法を変えるだけで、過去の結果に干渉できるとする理論は、非常に魅力的と言えるでしょう。
しかし送る時(1度目の観測)ではシャツだったはずのものが、ズボンになるのは、なぜなのでしょうか?
最大の理由は、1度目が弱い観測であり、多くのノイズや不確かな情報を含んでいる点にあります。
ただ実際には、2回目の観察が行われたことで、1回目の弱い観察のときにシャツだと思っていた特徴が再解釈され、ズボンの特徴だったことが「判明する」と考えられます。
そして1度目の観察結果は最終的結論に矛盾するものではなく、2度目の観察結果の別の側面が現れたに過ぎない、ということになってしまうのです。
この歴史の修正力とも言える強引な帰結は、どんなに対策を施しても、防ぐ方法がありません。
おそらく調べれば調べるほど、1度目の観察結果が実はシャツではなくズボンだった証拠が増えていくことでしょう。
あるいは1度目の測定結果は、2度目の強い測定では見られない結果が集約されたものになる可能性もあります。
なんらかの修正力が働き、矛盾が矛盾でなくなるのは非常に興味深い現象と言えるでしょう。
もしかしたら現実の因果関係や時間の流れは、私たちが直感的に理解しているものとは異なる、もっと別の存在なのかもしれません。
参考文献
Simulations of ‘backwards time travel’ can improve scientific experiments
https://www.phy.cam.ac.uk/news/simulations-backwards-time-travel-can-improve-scientific-experiments
元論文
Nonclassical Advantage in Metrology Established via Quantum Simulations of Hypothetical Closed Timelike Curves
https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.131.150202
ライター
川勝康弘: ナゾロジー副編集長。
大学で研究生活を送ること10年と少し。
小説家としての活動履歴あり。
専門は生物学ですが、量子力学・社会学・医学・薬学なども担当します。
日々の記事作成は可能な限り、一次資料たる論文を元にするよう心がけています。
夢は最新科学をまとめて小学生用に本にすること。
編集者
ナゾロジー 編集部
Views: 0
GotchaGotchaGamesは本日,ゲームコンストラクションツール「RPGMAKERWITH」のNintendoSwitch版の発売1周年記念セールを開始した。期間は4月20日23:59まで。期間中は,NintendoSwitch向けダウンロード版を30%オフの6006円,追加DLCも30%オフで購入できる。
Source link
Views: 0
近年はスマートフォンやゲーム機などさまざまなデバイスにUSB Type-Cポートが付属し、充電やデータ転送をUSB Type-Cケーブルで行うようになっていますが、デバイスとケーブルの位置関係によってはケーブルの根元が曲がって負荷がかかることもあります。コネクタ部が左右180度+水平360度に回転し、どんな角度でも無理なく接続できるサンワサプライのUSB Tyep-Cケーブル「KU-CCP100KAW18BK」が届いたので、どんな風に使えるのか実際に試してみました。
KU-CCP100KAW10BK【USB2.0 Type-C 両側コネクタ540度回転ケーブル ブラック(100W・1m)】両端のコネクタが540度(左右180度+水平360度)自由自在に回転。操作性と耐久性を大幅に向上させたUSB Type-Cケーブル。PD100W対応。ブラック・1m。|サンワサプライ株式会社
https://www.sanwa.co.jp/product/syohin?code=KU-CCP100KAW10BK
「KU-CCP100KAW10BK」のパッケージはこんな感じ。
さっそく取り出してみました。
ケーブルはシリコンタイでまとめられています。
ケーブルの長さは約1.8m。
ケーブル径は約3.5mmです。ケーブルの材質は曲げやねじれ、引っ張りに強いナイロンメッシュ。
ケーブルの両端にUSB Type-Cコネクタが付いており、USB Type-Cポートに挿入して接続できるようになっています。
「KU-CCP100KAW10BK」の特徴はなんと言っても「先端のコネクタ部が左右180度、水平360度に回転する」という点です。
通常時のコネクタを横から見るとこんな感じ。
ケーブルの位置は変わらないまま、先端のコネクタ部だけがパタッと90度倒れます。
逆方向にも90度倒すことが可能です。
コネクタを正面から見るとこんな感じ。
そのまま水平方向にくるりと360度回すことができます。
さっそく使用してみます。まずはコンセントに挿したアダプターに、「KU-CCP100KAW10BK」のコネクタを挿入。
反対側のコネクタをUSB Type-C対応のスマートフォンに挿入しました。「KU-CCP100KAW10BK」はUSB PD対応で100Wの急速充電が可能。データ転送速度は最大480Mbpsです。
充電やデータ転送を維持したまま、根元のコネクタ部を回転させることが可能。
ケーブルとデバイスがどんな位置関係になってもコネクタ部に負担がかかりにくくなっています。
通常のUSB Type-Cケーブルだったら以下のように根元がぐっと曲がってしまう場合(左)でも、「KU-CCP100KAW10BK」を使った場合(右)は問題ありません。
ケーブルを接続したままスマートフォンやタブレットを横向きにした場合でも、ケーブルが横に膨らむことなく垂直に折れてくれます。
実際にスマートフォンに挿入した「KU-CCP100KAW10BK」をぐるぐる回転させてみた様子は、以下の動画を見るとよくわかります。
コネクタ部が左右360度+水平180度に回転するサンワサプライの「両側コネクタ540度回転ケーブル KU-CCP100KAW18BK」レビュー – YouTube
サンワサプライの「KU-CCP100KAW18BK」は、記事作成時点ではAmazon.co.jpで税込2800円で購入できます。
Amazon.co.jp: サンワサプライ USB2.0 Type-C 両側コネクタ540度回転ケーブル ブラック(100W・1.8m) KU-CCP100KAW18BK : 産業・研究開発用品
また、「KU-CCP100KAW18BK」は以下のプレゼント記事からもゲットできます。
GIGAZINE春のプレゼント大放出企画「アンケートに答えて全部持っていってください!」 – GIGAZINE
この記事のタイトルとURLをコピーする
Views: 0
前回の記事では単語の埋め込み表現について解説しました。今回は文脈を考慮した文書全体の埋め込み表現を生成する方法について、具体的な例を交えながら解説します。特に、BERTモデルを使った実践的なアプローチに焦点を当て、「カレー」に関連するテキストを例として使用します。
テキストデータの分析や検索において、文書を数値ベクトルに変換する「埋め込み(Embedding)」技術は非常に重要です。特に、文脈を考慮した埋め込みは、単語の多義性や文脈依存の意味を適切に捉えることができます。
BERTのような事前学習済み言語モデルを活用することで、高品質な文脈化埋め込みを簡単に生成できるようになりました。この記事では、日本語テキストに対してBERTモデルを適用し、文書の埋め込み表現を生成する方法を解説します。
まずはGoogle Colabで実行するための環境をセットアップしましょう。日本語処理に必要なライブラリとツールをインストールします。
# 必要なライブラリのインストール
!pip install transformers fugashi unidic-lite torch numpy matplotlib scikit-learn pandas
# 日本語フォントと日本語処理ツールのインストール
!apt-get install -y fonts-noto-cjk fonts-noto-cjk-extra
!apt-get install -y mecab mecab-ipadic-utf8 libmecab-dev
!pip install japanize-matplotlib
# MeCabの設定ファイルの存在確認とインストール
!ln -s /etc/mecabrc /usr/local/etc/mecabrc 2>/dev/null || true
必要なライブラリをインポートします。
import torch
from transformers import AutoTokenizer, AutoModel
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib # 日本語フォントの設定
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
今回は、日本語に特化したBERTモデルを使用します。具体的には、東北大学が公開している「tohoku-nlp/bert-base-japanese-v3」を利用します。
# 日本語BERTモデルとトークナイザーのロード
model_name = "tohoku-nlp/bert-base-japanese-v3"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
次に、テキストから埋め込みベクトルを生成する関数を定義します。この関数は、入力テキストをトークン化し、BERTモデルに通して埋め込みを取得します。ここでは、最後の隠れ層の出力の平均を取ることで、文書全体の埋め込みを生成します。
def get_bert_embedding(text, model, tokenizer):
# テキストをトークン化
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=512)
# 勾配計算を無効化して計算効率を向上
with torch.no_grad():
outputs = model(**inputs)
# 最後の隠れ層の出力を取得([CLS]トークンの出力または全トークンの平均)
# 方法1: [CLS]トークンの出力を使用
# cls_embedding = outputs.last_hidden_state[:, 0, :].numpy()
# 方法2: 全トークンの平均を使用(パディングを除く)
# attention_mask を使って、実際のトークンの部分だけを平均計算に含める
last_hidden_state = outputs.last_hidden_state
attention_mask = inputs['attention_mask']
# マスクを拡張して隠れ状態の次元に合わせる
mask_expanded = attention_mask.unsqueeze(-1).expand(last_hidden_state.size()).float()
# マスクを適用して合計
sum_hidden = torch.sum(last_hidden_state * mask_expanded, 1)
# トークンの数で割って平均を求める
sum_mask = torch.clamp(mask_expanded.sum(1), min=1e-9)
mean_hidden = sum_hidden / sum_mask
# numpy配列に変換
embedding = mean_hidden.numpy()
return embedding[0] # バッチサイズ1の場合
それでは、カレーに関連する様々な文書を準備し、埋め込みを生成してみましょう。
# カレーに関連するテキスト例
curry_texts = [
"カレーは日本の家庭料理として定着しています。",
"インドカレーは本場のスパイスを使った本格的な味わいが特徴です。",
"カレーライスに福神漬けを添えるのは日本独自の食べ方です。",
"スパイスから手作りするカレーは風味が豊かです。",
"カツカレーは日本で人気のカレーの一種です。",
"タイのグリーンカレーはココナッツミルクとハーブが特徴的です。",
"カレーパンは日本で生まれた独自のパン料理です。",
"ジャワカレーは甘口で子供にも人気があります。",
"カレーのルーを使えば簡単に本格的な味が楽しめます。",
"スープカレーは北海道札幌が発祥と言われています。"
]
# 各テキストの埋め込みを生成
curry_embeddings = []
for text in curry_texts:
embedding = get_bert_embedding(text, model, tokenizer)
curry_embeddings.append(embedding)
# 埋め込みをnumpy配列に変換
curry_embeddings = np.array(curry_embeddings)
print(f"埋め込みの形状: {curry_embeddings.shape}")
生成した埋め込みを分析するために、コサイン類似度を計算してみましょう。これにより、テキスト間の意味的な近さを確認できます。
# コサイン類似度の計算
similarity_matrix = cosine_similarity(curry_embeddings)
# ヒートマップとして可視化
plt.figure(figsize=(10, 8))
plt.imshow(similarity_matrix, cmap='viridis', interpolation='nearest')
plt.colorbar(label='コサイン類似度')
plt.title('カレーに関するテキスト間の類似度')
plt.xticks(np.arange(len(curry_texts)), np.arange(1, len(curry_texts) + 1), rotation=90)
plt.yticks(np.arange(len(curry_texts)), np.arange(1, len(curry_texts) + 1))
plt.tight_layout()
plt.show()
# より見やすく表示するためのDataFrame作成
similarity_df = pd.DataFrame(similarity_matrix,
index=[f"T{i+1}" for i in range(len(curry_texts))],
columns=[f"T{i+1}" for i in range(len(curry_texts))])
display(similarity_df.round(3))
# 元のテキストとインデックスの対応を表示
for i, text in enumerate(curry_texts):
print(f"T{i+1}: {text}")
埋め込みを用いた簡単な文書検索の例を示します。クエリテキストの埋め込みと各文書の埋め込みとの類似度を計算し、最も類似度の高い文書を検索結果として返します。
def search_similar_documents(query_text, document_embeddings, documents, top_n=3):
# クエリテキストの埋め込みを取得
query_embedding = get_bert_embedding(query_text, model, tokenizer)
# 各文書との類似度を計算
similarities = cosine_similarity([query_embedding], document_embeddings)[0]
# 類似度でソートしてインデックスを取得
top_indices = np.argsort(similarities)[::-1][:top_n]
# 結果を返す
results = []
for idx in top_indices:
results.append({
"document": documents[idx],
"similarity": similarities[idx]
})
return results
# 検索例1: 日本のカレーについて
query1 = "日本の独自のカレー文化について知りたい"
results1 = search_similar_documents(query1, curry_embeddings, curry_texts)
print(f"クエリ: {query1}")
for i, result in enumerate(results1):
print(f"{i+1}. 類似度: {result['similarity']:.4f}")
print(f" {result['document']}")
print()
# 検索例2: 本格的なスパイスカレー
query2 = "本格的なスパイスの効いたカレーのレシピ"
results2 = search_similar_documents(query2, curry_embeddings, curry_texts)
print(f"クエリ: {query2}")
for i, result in enumerate(results2):
print(f"{i+1}. 類似度: {result['similarity']:.4f}")
print(f" {result['document']}")
print()
最後に、より実用的なシナリオとして、ユーザーの好みに合わせたカレーレシピの推薦システムを簡単に実装してみましょう。
# カレーレシピのデータ
curry_recipes = [
{
"title": "基本の肉じゃがカレー",
"description": "ジャガイモと牛肉を使った基本の和風カレーです。家庭的な味わいが特徴です。",
"ingredients": ["牛肉", "じゃがいも", "にんじん", "玉ねぎ", "カレールー"],
"difficulty": "easy"
},
{
"title": "スパイスから作るインドカレー",
"description": "10種類以上のスパイスを調合して作る本格的なインドカレーです。独特の風味と深い味わいが楽しめます。",
"ingredients": ["鶏肉", "玉ねぎ", "トマト", "ヨーグルト", "ガラムマサラ", "クミン", "ターメリック", "コリアンダー"],
"difficulty": "hard"
},
{
"title": "ココナッツミルクのタイ風グリーンカレー",
"description": "ココナッツミルクとタイハーブを使った爽やかな辛さのグリーンカレーです。",
"ingredients": ["鶏肉", "ナス", "ピーマン", "ココナッツミルク", "グリーンカレーペースト", "ナンプラー"],
"difficulty": "medium"
},
{
"title": "野菜たっぷりキーマカレー",
"description": "挽き肉と細かく刻んだ野菜をたっぷり使ったヘルシーなキーマカレーです。",
"ingredients": ["合挽き肉", "玉ねぎ", "にんじん", "ズッキーニ", "トマト", "カレー粉"],
"difficulty": "easy"
},
{
"title": "札幌風スープカレー",
"description": "具材の旨みがたっぷり溶け込んだスープと、スパイシーな風味が特徴の北海道札幌風スープカレーです。",
"ingredients": ["鶏手羽元", "じゃがいも", "かぼちゃ", "ブロッコリー", "スープカレースパイス"],
"difficulty": "medium"
}
]
# レシピの説明文からベクトル生成
recipe_descriptions = [recipe["description"] for recipe in curry_recipes]
recipe_embeddings = []
for desc in recipe_descriptions:
embedding = get_bert_embedding(desc, model, tokenizer)
recipe_embeddings.append(embedding)
recipe_embeddings = np.array(recipe_embeddings)
# ユーザーの好みに基づくレシピ推薦関数
def recommend_recipes(user_preference, recipe_data, recipe_embeddings, top_n=3):
# ユーザーの好みをベクトル化
preference_embedding = get_bert_embedding(user_preference, model, tokenizer)
# 類似度計算
similarities = cosine_similarity([preference_embedding], recipe_embeddings)[0]
# 類似度順にソート
top_indices = np.argsort(similarities)[::-1][:top_n]
# 推薦結果
recommendations = []
for idx in top_indices:
recommendations.append({
"recipe": recipe_data[idx],
"similarity": similarities[idx]
})
return recommendations
# 推薦例
user_preference1 = "本格的なスパイスの風味を楽しみたい"
recommendations1 = recommend_recipes(user_preference1, curry_recipes, recipe_embeddings)
print(f"ユーザーの好み: {user_preference1}")
print("おすすめレシピ:")
for i, rec in enumerate(recommendations1):
print(f"{i+1}. {rec['recipe']['title']} (類似度: {rec['similarity']:.4f})")
print(f" 説明: {rec['recipe']['description']}")
print(f" 材料: {', '.join(rec['recipe']['ingredients'])}")
print(f" 難易度: {rec['recipe']['difficulty']}")
print()
user_preference2 = "家庭的で優しい味わいのカレーが食べたい"
recommendations2 = recommend_recipes(user_preference2, curry_recipes, recipe_embeddings)
print(f"ユーザーの好み: {user_preference2}")
print("おすすめレシピ:")
for i, rec in enumerate(recommendations2):
print(f"{i+1}. {rec['recipe']['title']} (類似度: {rec['similarity']:.4f})")
print(f" 説明: {rec['recipe']['description']}")
print(f" 材料: {', '.join(rec['recipe']['ingredients'])}")
print(f" 難易度: {rec['recipe']['difficulty']}")
print()
この記事では、BERTを用いた文脈化埋め込みの生成方法と、その応用例について解説しました。カレーに関するテキストを例に、文書間の類似度計算や文書検索、さらにはレシピ推薦システムなど、実用的なアプリケーションへの適用方法を紹介しました。
BERTによる文脈化埋め込みの主な利点は以下の通りです:
今回示した例はGoogle Colabで実行できる簡易なものですが、これをベースに様々な自然言語処理タスクに応用できます。例えば、レシピデータベースの検索機能や、カスタマーサポートのFAQ検索、文書分類など、多くの実用的なシステムに組み込むことが可能です。
Views: 0