<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Series on Grayrecord Technow Blog</title>
    <link>https://technow.grayrecord.com/categories/series/</link>
    <description>Recent content in Series on Grayrecord Technow Blog</description>
    <image>
      <title>Grayrecord Technow Blog</title>
      <url>https://technow.grayrecord.com/images/Grayrecord-technow.png</url>
      <link>https://technow.grayrecord.com/images/Grayrecord-technow.png</link>
    </image>
    <generator>Hugo -- 0.159.0</generator>
    <language>ja</language>
    <lastBuildDate>Sun, 08 Jun 2025 10:55:01 +0900</lastBuildDate>
    <atom:link href="https://technow.grayrecord.com/categories/series/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Super Legend Swindler #003</title>
      <link>https://technow.grayrecord.com/post/super-legend-swindler-003/</link>
      <pubDate>Sun, 08 Jun 2025 10:55:01 +0900</pubDate>
      <guid>https://technow.grayrecord.com/post/super-legend-swindler-003/</guid>
      <description>&lt;p&gt;あまりに、どけちすぎる、伝説級の詐欺メールが登場です。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;楽天ポイント大還元祭！
今だけ！楽天カード会員様限定で、エントリーしてくじを引くだけで最大3,000ポイントが当たるチャンス！抽選は毎日可能。今すぐチャレンジしよう！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;■ キャンペーン概要
期間：2025年5月25日〜6月20日
対象：楽天カード会員様（要ログイン）
■ 参加方法
以下のボタンをクリックしてエントリー
ログイン後、くじを引くだけで抽選に参加！
その場でポイント当選結果が表示されます
■ 賞品内容
特賞：楽天ポイント 3,000pt（5名様）
1等：1,000pt（30名様）
2等：300pt（100名様）
3等：50pt（1,000名様）
参加賞：楽天ポイント 1pt（全員）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;保証されてるのが1ポイントだけって、詐欺としてもケチすぎるでしょう。
こんなんで誰が応募するとでも？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;■ ご注意事項
楽天IDでのログインが必要です
当選ポイントは期間限定ポイントとして付与されます
キャンペーン内容は予告なく変更・終了する場合があります
▶ 今すぐエントリーしてくじに挑戦&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;番外編として、次の愚劣詐欺もピックアップ。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;[spam]【重要なお知らせ】amazonアマゾンプライムの自動更新設定を解除いたしました3574366919&amp;rdquo;&lt;/p&gt;
&lt;p&gt;サブジェクトしかねー本文もねー添付もねーリンクもねー
俺ら東京さ行ぐだの替え歌にしちゃうぞ。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Super Legend Swindler #002</title>
      <link>https://technow.grayrecord.com/post/super-legend-swindler-002/</link>
      <pubDate>Fri, 06 Jun 2025 12:10:00 +0900</pubDate>
      <guid>https://technow.grayrecord.com/post/super-legend-swindler-002/</guid>
      <description>&lt;p&gt;またしても、伝説級の詐欺師あらわるです。&lt;/p&gt;
&lt;p&gt;FROM: &lt;strong&gt;European Commission&lt;a href=&#34;mailto:info@eu.org&#34;&gt;info@eu.org&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;EUを名乗っているのに、ドメインが「eu.org」？&lt;br&gt;
あり得ない…。&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Representation in United Kingdom
Europe House
32 Smith Square
London SW1P 3EU.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;For your attention.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;                         RE: $25,000,000.00 PAYMENT APPROVAL NOTICE.
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This message is to bring to your notice that your scammed victim&amp;rsquo;s compensation funds payment has been approved for payment by the Order of the President of the European Commission after the Executive Meeting on Monday 29th October 2024.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Upon the process of your payment, we received an application from one of your attorneys in the United Kingdom (ADENITIS &amp;amp; PARTNERS) who introduced himself as your legal representative in the United Kingdom. Stating that you have authorized them to change the ownership of your payment to INVERNESS MAINTENANCE COMPANY INC. as the sole beneficiary with the account number: 3010007328 with the Citi Bank of America.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Super Legend Swindler</title>
      <link>https://technow.grayrecord.com/post/super-legend-swindler/</link>
      <pubDate>Sat, 31 May 2025 12:45:50 +0900</pubDate>
      <guid>https://technow.grayrecord.com/post/super-legend-swindler/</guid>
      <description>&lt;p&gt;本日、スーパーレジェンド級の詐欺と思われるメールが着弾しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://coetas.jp/creditcard/apple-card/&#34;&gt;Apple Card（アップルカード）は2025年現在発行できる？現状や特徴を紹介&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Appleが提供するクレジットカード「Apple Card」は、2025年4月現在、日本では利用できません。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;そう、まだ、発行されていないカードです。私も、まだ、&lt;strong&gt;発行されていないカード&lt;/strong&gt; で詐欺メールが来たのは初めてです。
では、メールを晒しますね。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Apple Cardを騙る詐欺メールのスクリーンショット&#34; loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/legend-swindler.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文としては以下の内容です。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;カード情報の速やかなご確認
2025年5月26日にご登録のカードにおいて異常な使用が確認されました。現在、ご利用は一時的に制限されております。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Apple Cardのご利用を継続するため、2日以内に認証手続きを完了してください。情報は暗号化され保護されます。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;残念ですが、この文面は100%、信頼不可能です。この種のメールは個人情報を詐取する目的で作られており、リンク先のサイトで情報を入力してしまうと、その情報は悪用される可能性が高いです。&lt;/p&gt;
&lt;p&gt;まず、詐欺メールの基本技術として、緊急性を煽るなどが利用されています。これは、詐欺メールのもう、基本技術としてありふれていますね。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;現在、ご利用は一時的に制限されております。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;などは典型例です。&lt;/p&gt;
&lt;p&gt;ある意味、未発行のカードを騙るという手口は盲点かもしれません。特に、Appleユーザはもしかすると騙されるかもしれません。この種のパターンは要注意かもしれません。しかし、未発行のカードという原点を忘れなければ騙されようがありません。&lt;/p&gt;
&lt;p&gt;もし、このようなメールを受信しても、慌ててリンクをクリックしたり、情報を入力したりしないでください。まずは&lt;a href=&#34;https://www.apple.com/jp/&#34;&gt;Appleの公式サイト&lt;/a&gt;にアクセスし、ご自身のApple IDでログインして状況を確認するようにしましょう。不審なメールは、Appleに報告することも可能です。この時、メール上のリンクの使用は厳禁です。アカウント情報を登用される恐れがあります。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AIモデルの注意機構を紐解く：『走れメロス』を題材にしたLLM解析</title>
      <link>https://technow.grayrecord.com/post/visualize-llm-attention-002/</link>
      <pubDate>Sun, 13 Apr 2025 15:55:00 +0900</pubDate>
      <guid>https://technow.grayrecord.com/post/visualize-llm-attention-002/</guid>
      <description>&lt;div class=&#34;navigation-box&#34;&gt;
    
※ &lt;strong&gt;この記事は前の記事の続きになります。&lt;/strong&gt;
&lt;a href=&#34;https://technow.grayrecord.com/post/visualize-llm-attention/&#34;&gt;AIモデルの裏側を探る：アテンションメカニズムの可視化とは？&lt;/a&gt;を参照してください。

&lt;/div&gt;

&lt;p&gt;先の記事で、LLMのアテンション機構の可視化を実施しました。そこからの続きで別の文について、可視化を試みてみます。モデルをGPT-2系の日本語モデルに変えて、『走れメロス』の冒頭の文に挑戦してみました。使用したのは以下の文になります。「メロスは激怒した。必ず、かの邪智暴虐の王を除かなければならぬと決意した。メロスには政治がわからぬ。メロスは、村の牧人である。笛を吹き、羊と遊んで暮して来た。けれども邪悪に対しては、人一倍に敏感であった。」&lt;/p&gt;
&lt;p&gt;基本的なコードは先のコードですが、幾つか変わっています。実験はGoogle Colab上で行っています。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;torch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;transformers&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPT2Model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T5Tokenizer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPT2LMHeadModel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;plt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;seaborn&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;japanize_matplotlib&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tokenizer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T5Tokenizer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_pretrained&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;rinna/japanese-gpt2-medium&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;model&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPT2LMHeadModel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_pretrained&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;rinna/japanese-gpt2-medium&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;attn_implementation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eager&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;メロスは激怒した。必ず、かの邪智暴虐の王を除かなければならぬと決意した。メロスには政治がわからぬ。メロスは、村の牧人である。笛を吹き、羊と遊んで暮して来た。けれども邪悪に対しては、人一倍に敏感であった。&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tokens&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tokenizer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;return_tensors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# トークンIDを対応する単語へ変換&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tokens_list&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tokenizer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;convert_ids_to_tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;input_ids&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tolist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 最後の層、最初のAttentionヘッドを取得&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;layer_idx&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;head_idx&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;attention_matrix&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;attentions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;layer_idx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;head_idx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;numpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 左上1/4部分を切り取る&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;quarter_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;attention_matrix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 行列サイズの1/2を計算&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;subset_matrix&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;attention_matrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quarter_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quarter_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 左上1/4部分を抽出&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 対応するトークンのリストも切り取る&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;subset_tokens&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tokens_list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quarter_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ヒートマップを描画&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;figure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;figsize&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;heatmap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subset_matrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;viridis&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xticklabels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subset_tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yticklabels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subset_tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xlabel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Attention対象&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ylabel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Attention元&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;左斜め上1/4のAttentionマップ拡大表示&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xticks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rotation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;90&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fontsize&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yticks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fontsize&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可視化した結果が以下になります。アテンションマップの隅1/4を拡大しています。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/attention003.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;ここから言えることは、恐らく、メロスの単語が辞書にないためだと思いますが、メロスの挙動は不安定です。その結果、周囲の文脈から何を意味しているか推測している可能性があります。また、主語「メロス」と「邪」のようなワードに注意が向いているようです。「邪智暴虐」という表現が特徴的ですから、AIがそのフレーズを重要だととらえている可能性があります。また、文のイメージがネガティブというのも影響している可能性があります。また、除にも注意が向いているので、「除かなければならぬ」などの文脈に注意が流れている可能性があります。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AIモデルの裏側を探る：アテンションメカニズムの可視化とは？</title>
      <link>https://technow.grayrecord.com/post/visualize-llm-attention/</link>
      <pubDate>Sat, 12 Apr 2025 06:55:00 +0900</pubDate>
      <guid>https://technow.grayrecord.com/post/visualize-llm-attention/</guid>
      <description>&lt;p&gt;最近、あちこちに出てきた、Anthtropicの&amp;quot;On the Biology of a Large Language Model&amp;quot;が気になった。紹介としては、MIT Technology Reviewの&amp;quot;&lt;a href=&#34;https://www.technologyreview.jp/s/358515/anthropic-can-now-track-the-bizarre-inner-workings-of-a-large-language-model/&#34;&gt;大規模言語モデルは内部で
何をやっているのか？
覗いて分かった奇妙な回路&lt;/a&gt;(有料記事)&amp;ldquo;がある。しかし、有料記事であり私も、中身を見ていない。そのため、この記事のベースであろう、原著論文を辿った。&lt;/p&gt;
&lt;p&gt;その結果、以下のことが示唆されるようだ。とりあえず、原著論文をNotebookLM Plusに持ち込んで、最近の成果について尋ねてみた。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;多段階推論&lt;/strong&gt;: Claude 3.5 Haikuが、例えば「ダラスを含む州の州都は？」という質問に対して、「テキサス」という中間的な概念を内部で特定し、「オースティン」という最終的な答えを導き出すといった**「二段階」の推論**を実際に行っていることが示されました。アトリビューショングラフによって、この内部ステップを視覚的に捉え、操作することも可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;詩の作成における計画&lt;/strong&gt;: モデルが詩の行を書く前に、潜在的な韻を踏む単語を事前に特定し、計画していることが発見されました。これらの事前に選択された韻の候補が、その後の行全体の構成に影響を与えている様子が観察されています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多言語回路&lt;/strong&gt;: Claude 3.5 Haikuは、言語固有の回路と、言語に依存しない抽象的な回路の両方を使用していることがわかりました。より小型で能力の低いモデルと比較して、言語に依存しない回路がより顕著であることが示されています。これは、モデルが概念をより普遍的なレベルで理解し、処理する能力が高まっていることを示唆しています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;足し算の一般化&lt;/strong&gt;: 同じ足し算の回路が、非常に異なる文脈間で一般化されている事例が確認されました。これは、モデルが抽象的な計算能力を獲得していることを示唆しています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;医療診断&lt;/strong&gt;: モデルが報告された症状に基づいて候補となる診断を内部で特定し、それらを用いて追加の症状に関するフォローアップの質問を生成する様子が示されました。これも、モデルが明示的にステップを書き出すことなく「頭の中で」推論を行っている例です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;エンティティ認識とハルシネーション&lt;/strong&gt;: モデルが既知のエンティティと未知のエンティティを区別する回路を持つことが明らかになりました。この回路の「誤作動」がハルシネーションの原因となる可能性があることが示唆されています。既知のエンティティに関する質問に対しては、モデルは既知の答えを抑制する回路を活性化させることがわかっています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;有害な要求の拒否&lt;/strong&gt;: モデルが、事前学習中に学習した特定の有害な要求を表す特徴から集約された、汎用的な「有害な要求」の特徴をファインチューニング中に構築する証拠が見つかりました。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ジェイルブレイクの分析&lt;/strong&gt;: 特定のジェイルブレイク攻撃が、モデルを「気付かないうちに」危険な指示を与え始めさせ、その後、構文的および文法的な規則に従う圧力によって継続させるメカニズムが調査されました。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;連鎖的思考の忠実性&lt;/strong&gt;: モデルが連鎖的思考（CoT）で示す推論が、実際の内部メカニズムと一致する場合、そうでない場合、そして人間が与えた手がかりから逆向きに推論している場合を区別することが可能になりました。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;隠れた目標を持つモデルの分析&lt;/strong&gt;: 訓練プロセスの「バグ」を悪用するという秘密の目標を持つようにファインチューニングされたモデルの変種に対して、その目標の追求に関与するメカニズムが特定されました。興味深いことに、これらのメカニズムはモデルの「アシスタント」ペルソナの内部表現に埋め込まれていました。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ここで、アトリビューショングラフに関心ができた、では、例えばGPT-2でアトリビューショングラフが作れないかと言うのが今回のテーマとなる。
さすがに、GPT-4oのようなモデルは中身が公開されていないし、公開されているとしても、DeepSeek-R1などはモデル規模が大きすぎ、そもそも、処理が重すぎる。
それで、古典的なモデルであるGPT-2に目を付けた。
そのため、以下のようなコードを実行した。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;torch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;transformers&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPT2Model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPT2Tokenizer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;plt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;seaborn&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tokenizer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPT2Tokenizer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_pretrained&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;gpt2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;model&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPT2Model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_pretrained&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;gpt2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;attn_implementation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eager&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;The quick brown fox jumps over the lazy dog.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tokens&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tokenizer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;return_tensors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;torch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no_grad&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;output_attentions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;attentions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attentions&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# これはリスト形式で各層のAttentionを含む&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 例えば、最後の層のAttentionを可視化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;layer_idx&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;head_idx&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 最初のAttentionヘッドを選択&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;attention_matrix&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;attentions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;layer_idx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;head_idx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;numpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;figure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;figsize&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;heatmap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attention_matrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;viridis&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xticklabels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;input_ids&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yticklabels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;input_ids&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xlabel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Attention対象&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ylabel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Attention元&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;GPT-2のAttentionマップ&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このコードによって、以下のように最後の層のAttentionが可視化される。&lt;/p&gt;</description>
    </item>
    <item>
      <title>EvidenceによるBI入門 #003.1</title>
      <link>https://technow.grayrecord.com/post/evidence-0031/</link>
      <pubDate>Wed, 26 Mar 2025 14:42:58 +0900</pubDate>
      <guid>https://technow.grayrecord.com/post/evidence-0031/</guid>
      <description>&lt;p&gt;Evidenceを理解する上でのポイントとして、静的サイトジェネレータを箸休めとして説明します。&lt;/p&gt;
&lt;p&gt;まず、静的サイトと動的サイトの区別からです。静的サイトとは、コンテンツがファイルとして固定され、サーバはリクエストに基づきただ配信するだけのものです。初期のホームページと言われたもののスタイルです。&lt;/p&gt;
&lt;p&gt;次に動的サイト、これはリクエストに応じて何らかのコードがサーバ上で実行され、動的にレスポンスが生成され、それがクライアントに返されるものです。WordpressなどのBLOGサービスなどはこの形態です。&lt;/p&gt;
&lt;h2 id=&#34;静的サイトとは&#34;&gt;静的サイトとは&lt;/h2&gt;
&lt;p&gt;Wordpressなどではコンテンツはデータベースに格納されたものがベースで、同じようにテーマなどの情報がデータベースに格納され、それがユーザのリクエストによって組み立てられて返答されるという構造です。&lt;/p&gt;
&lt;h2 id=&#34;静的サイトと動的サイトの差異&#34;&gt;静的サイトと動的サイトの差異&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://monotein.com/blog/what-is-ssg&#34;&gt;これだけで「静的サイトジェネレーター」のすべてがわかります&lt;/a&gt;を参考にすれば以下のように纏められます。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;動的サイト&lt;/th&gt;
          &lt;th&gt;静的サイト&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;表示されるページ&lt;/td&gt;
          &lt;td&gt;ユーザーに応じて表示するページを変更できる&lt;/td&gt;
          &lt;td&gt;全員に同じページを表示する&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;スピード&lt;/td&gt;
          &lt;td&gt;遅い&lt;/td&gt;
          &lt;td&gt;速い&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ページが生成される時&lt;/td&gt;
          &lt;td&gt;アクセスされた時&lt;/td&gt;
          &lt;td&gt;ビルド時&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Wordpressなどが動的サイトとして構成されたのは、データベースにコンテンツ、テーマを格納しそれをリクエスト時に構築するという構造が都合が良かったためです。&lt;/p&gt;
&lt;h2 id=&#34;静的サイトが再度注目された理由&#34;&gt;静的サイトが再度注目された理由&lt;/h2&gt;
&lt;p&gt;しかし、今、再度、静的サイトジェネレータが注目された理由があります。まず、宿命的に表示されるコンテンツをユーザに合わせてというのは苦手ですが、通常のBlogサービスであれば、読者は通常ログインなどの手続きをしないため、ユーザに合わせては要件から除外できます。そうすると、動的サイトのメリットはかなり減ります。恐らく、GUIでのWebベースでのコンテンツメインテナンスなどのこの表に書かれていないモノになるでしょう。&lt;/p&gt;
&lt;p&gt;そして、「全員に同じページを表示する」であれば、コンテンツへのテーマなどの適用はアクセス時にこだわる必要性はないになります。よって、バッチ的にサイトをコンテンツから生成する静的サイトジェネレータとなるわけです。&lt;/p&gt;
&lt;h2 id=&#34;静的サイトジェネレータを支える要素&#34;&gt;静的サイトジェネレータを支える要素&lt;/h2&gt;
&lt;p&gt;静的サイトジェネレータが注目された理由はそれだけではありません。一つはクライアント端末の性能向上です。例えば、昔の携帯電話のパフォーマンスと今のスマートフォンのパフォーマンスを比べてください。昔の携帯電話、フィーチャーフォン向けに開発された、CHTMLなどはかなりの仕様を削減していました、当然、クライアント側でのコード実行などは考えてすらいませんでした。しかし、今のスマートフォンはクライアント側でのモバイルコードの実行には十分であり、ECMA Script、WebAssemblyなどの支援もあります。故にコードの実行をWebサーバからクライアントに移すことも可能になりました。&lt;/p&gt;
&lt;p&gt;故に、無理に、サーバ側で全てのコンテンツをレンダリングする必要はなくなりました、また、動的コンテンツを残すとしても、インラインフレームなどで組み込みむ手段もあります。従って、メインのコンテンツを動的に生成することは必ずしも必要なくなくなりました。&lt;/p&gt;
&lt;h2 id=&#34;静的サイトジェネレータの限界&#34;&gt;静的サイトジェネレータの限界&lt;/h2&gt;
&lt;p&gt;とはいえ、最初に上げた、「全員に同じページを表示する」という特性は無くなることはありません。&lt;/p&gt;
&lt;p&gt;従って、静的サイトジェネレータを基盤とするBIツールであるEvidenceでは例えば、ユーザを認識してコンテンツを変えるなどは苦手です。例えば、厳密に、Need-to-Knowを実現するのは困難です。サイト自体に認証などは出来るにしても、コンテンツをユーザに合わせてレンダリングするのは困難です。&lt;/p&gt;
&lt;p&gt;この辺のポイントを理解するのが、Evidenceを有効活用する道になります。&lt;/p&gt;</description>
    </item>
    <item>
      <title>EvidenceによるBI入門 #003</title>
      <link>https://technow.grayrecord.com/post/evidence-003/</link>
      <pubDate>Sun, 23 Mar 2025 00:00:00 +0900</pubDate>
      <guid>https://technow.grayrecord.com/post/evidence-003/</guid>
      <description>&lt;p&gt;Covid-19のダッシュボードの作成を例にしています。イメージとしては、表形式でデータが見えるようにして、時系列で合計値がチャートして見えるようにして、カレンダーヒートマップで曜日ごとの動きが見えるようにするというのを考えてみます。仮説としては人の動きに感染者は依存しているのではないかと言う仮説です。だとすれば、曜日ごとに特徴があるのではないかと言う仮説です。&lt;/p&gt;
&lt;p&gt;流れとしては、以下のような順番になります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;プロジェクトの作成&lt;/li&gt;
&lt;li&gt;データのインポート&lt;/li&gt;
&lt;li&gt;クエリとビジュアリゼーションコンポーネントの配置&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;クエリとビジュアリゼーションコンポーネントの配置は主にMarkdownのドキュメントで行います。&lt;/p&gt;
&lt;h2 id=&#34;プロジェクトの作成&#34;&gt;プロジェクトの作成&lt;/h2&gt;
&lt;p&gt;まず、プロジェクトを作成するところから始めます。プロジェクトの作成はVisual Studio Codeから作成します。&lt;/p&gt;
&lt;h3 id=&#34;プロジェクトの作成15&#34;&gt;プロジェクトの作成(1/5)&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;height:400&#34; loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0002.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;プロジェクトの作成25&#34;&gt;プロジェクトの作成(2/5)&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;height:400&#34; loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0003.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;プロジェクトの作成35&#34;&gt;プロジェクトの作成(3/5)&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;height:400&#34; loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0004.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;プロジェクトの作成45&#34;&gt;プロジェクトの作成(4/5)&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;height:400&#34; loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0005.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;プロジェクトの作成55&#34;&gt;プロジェクトの作成(5/5)&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;height:400&#34; loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0006.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;evidenceのウェルカム画面&#34;&gt;Evidenceのウェルカム画面&lt;/h2&gt;
&lt;p&gt;プロジェクトを作成すると、Evidenceのサーバを起動可能になります。Evidenceのサーバを起動すると通常はポート1313で待ち受け状態になります。そうすると、Webブラウザで開けるようになります。ウェルカム画面は以下のようになります。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;height:400&#34; loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0007.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;evidenceサーバの起動&#34;&gt;Evidenceサーバの起動&lt;/h2&gt;
&lt;p&gt;Evidenceサーバの起動はVisual Studio Codeから行います。コマンドパレットから起動できます。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;height:400&#34; loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0015.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;データのインポート&#34;&gt;データのインポート&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.mhlw.go.jp/stf/covid-19/open-data.html&#34;&gt;https://www.mhlw.go.jp/stf/covid-19/open-data.html&lt;/a&gt; から取得した、新規陽性者数の推移（日別）のデータをプロジェクトフォルダのsourcesにcovid19というディレクトリを作成して
配置します。新規陽性者数の推移（日別）のデータはnewly_confirmed_cases_daily.csvというファイル名なので、newly_confirmed_cases_dailyというテーブルとして識別されます。
データのインポートはEvidenceのサーバからやると、設定ファイルなどを簡単に作成できます。&lt;/p&gt;
&lt;h2 id=&#34;データのインポート-1&#34;&gt;データのインポート&lt;/h2&gt;
&lt;h3 id=&#34;データのインポート-14&#34;&gt;データのインポート (1/4)&lt;/h3&gt;
&lt;p&gt;Evidenceのサーバのインポート画面ではインポート可能なデータ形式の確認ができます。
Evidenceでインポート可能なデータについてはEvidenceのWeb画面を起動したときのSettingsの中の画面で確認できる。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;height:400&#34; loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0008.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;データのインポート-24&#34;&gt;データのインポート (2/4)&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;height:400&#34; loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0009.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;データのインポート-34&#34;&gt;データのインポート (3/4)&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;height:400&#34; loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0010.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;データのインポート-44&#34;&gt;データのインポート (4/4)&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;height:400&#34; loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0011.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;現在evidenceでインポート可能なもの&#34;&gt;現在Evidenceでインポート可能なもの&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;BigQuery&lt;/li&gt;
&lt;li&gt;CSV&lt;/li&gt;
&lt;li&gt;Databricks&lt;/li&gt;
&lt;li&gt;DuckDB&lt;/li&gt;
&lt;li&gt;Microsoft SQL Server&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Redshift&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Snowflake&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;li&gt;Trino&lt;/li&gt;
&lt;li&gt;MotherDuck&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;最初のコンテンツの作成&#34;&gt;最初のコンテンツの作成&lt;/h2&gt;
&lt;h3 id=&#34;最初のコンテンツの作成-12&#34;&gt;最初のコンテンツの作成 (1/2)&lt;/h3&gt;
&lt;p&gt;次に、プロジェクトフォルダのpages/index.mdを編集します。index.mdはEvidenceのサーバに接続してデフォルトで表示されるページになります。ここのコンテンツを以下のようにします。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;
    ---
    title: Welcome to Evidence
    ---

    ## Covid19 のCSV確認

    ```sql covid19_10
        select *
        from covid19.newly_confirmed_cases_daily
        limit 10
    ```

    &amp;lt;DataTable data={covid19_10}/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;最初のコンテンツの作成-22&#34;&gt;最初のコンテンツの作成 (2/2)&lt;/h3&gt;
&lt;p&gt;これにより、covid19.newly_confirmed_cases_dailyから10行取り出して表として出力されます。&lt;/p&gt;</description>
    </item>
    <item>
      <title>EvidenceによるBI入門 #001</title>
      <link>https://technow.grayrecord.com/post/evidence-001/</link>
      <pubDate>Thu, 20 Mar 2025 00:00:00 +0900</pubDate>
      <guid>https://technow.grayrecord.com/post/evidence-001/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0017.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;目的と対象読者&#34;&gt;目的と対象読者&lt;/h2&gt;
&lt;p&gt;このドキュメントは、Windows環境を前提にEvidenceの利用方法について記述しています。Evidenceは様々な環境で稼働しますが、執筆時点での環境および設定を基準としています。&lt;/p&gt;
&lt;p&gt;対象読者&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Evidenceをはじめて利用する方&lt;/li&gt;
&lt;li&gt;Windows環境でのセットアップ利用方法に関心のある方&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前提条件&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;インストール済みのソフトウェア&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Visual Studio Code&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;npm&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Node.jsのインストール方法&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scoopを利用し、執筆時点のLTSを利用しています。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Evidenceのバージョン&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;バージョン 40.1.1をターゲットにしています。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/screenshots/0002.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;evidenceとはなにか&#34;&gt;Evidenceとはなにか&lt;/h2&gt;
&lt;p&gt;「Evidence」とは、Markdownで管理できるオープンソースのBI（ビジネスインテリジェンス）ツールです。
具体的には、レポート、意思決定支援ツール、埋め込みダッシュボードなどのデータプロダクトを構築するための
オープンソースのフレームワークと説明されています。&lt;/p&gt;
&lt;p&gt;Evidenceの主な特徴は以下の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;コード駆動型BIツール&lt;/em&gt;:ドラッグ＆ドロップ式のBIツールとは異なり、コード（主にSQLとMarkdown）を使用してデータプロダクトを構築します。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Markdownで管理&lt;/em&gt;: Markdownファイル内でSQLクエリを記述し、コンテンツやレイアウトを管理します。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;多様なデータソースに対応&lt;/em&gt;: データウェアハウス、フラットファイル（例：CSV）、非SQLデータソースなど、さまざまな種類のデータソースを扱うことができます。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;SQLクエリの実行と結果の可視化&lt;/em&gt;: Markdownページに記載されたSQLステートメントに基づいてデータソースに対してクエリを実行し、その結果をグラフや表としてウェブサイトに出力できます。Markdown内で使用されるSQLはDuckDBのSQLです。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;静的サイトの生成&lt;/em&gt; 出力は静的なウェブサイトとして生成されるため、デプロイや共有が容易です。npm run buildコマンドで静的サイトを生成し、S3などのホスティングサービスに格納して簡単に共有できます。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;豊富なコンポーネント&lt;/em&gt;: クエリ結果に基づいて、さまざまなチャート（棒グラフなど）、表（DataTable）、大きな単一の値（BigValue）などのコンポーネントをレンダリングできます。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;高度な機能&lt;/em&gt;: テンプレートページによる複数ページの生成、表示内容の制御のためのループやIf/Else文、クエリ結果のフィルタリング機能（Query Functions）なども備わっています。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/whatsevidence.svg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;evidenceの適する用途&#34;&gt;Evidenceの適する用途&lt;/h2&gt;
&lt;p&gt;アーキテクチャなどを踏まえての説明は次回以降になりますが、Evidenceは様々な用途に利用可能です。基本的にはOn the flyのクエリーは困難なので、IoTなどの機器からのリアルタイムなダッシュボードには向きません。どちらかと言うと、日次・月次でしめるような処理が適します。従って、売り上げなどの分析が適すると思われます。&lt;/p&gt;</description>
    </item>
    <item>
      <title>EvidenceによるBI入門 #002</title>
      <link>https://technow.grayrecord.com/post/evidence-002/</link>
      <pubDate>Thu, 20 Mar 2025 00:00:00 +0900</pubDate>
      <guid>https://technow.grayrecord.com/post/evidence-002/</guid>
      <description>&lt;h2 id=&#34;基本的な準備&#34;&gt;基本的な準備&lt;/h2&gt;
&lt;h3 id=&#34;システム構成の概要&#34;&gt;システム構成の概要&lt;/h3&gt;
&lt;h4 id=&#34;evidenceのアーキテクチャ&#34;&gt;Evidenceのアーキテクチャ&lt;/h4&gt;
&lt;p&gt;Evidenceは基本的には、データソース、DuckDB、レンダリングエンジンという仕組みになっています。実際には更に、
静的サイトジェネレータも重要な位置を示しますが、その性質からここには表現していません。以下の図にEvidenceの基本的なアーキテクチャを示します。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/arch2.svg&#34;&gt;&lt;/p&gt;
&lt;p&gt;まず、データソースからデータが取り出され、共通のデータ形式であるParquetに変換されます。ParquetはDuckDBによって利用されます。
従って、Evidenceで利用可能なデータは基本的にParquetに抽出されたデータに限定されます。
よって、標準的なBIツールのようにOn the flyのクエリを動的に送出してリアルタイムなデータを反映させることは出来ません。
従って、そのような要件が含まれる場合にはEvidenceは適切な選択肢ではありません。&lt;/p&gt;
&lt;p&gt;従って、ドキュメントの流れまで含めて、アーキテクチャを図示すると以下のような形になります。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://technow.grayrecord.com/images/evidence/evidence-arch.svg&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;動作環境&#34;&gt;動作環境&lt;/h4&gt;
&lt;p&gt;Evidenceを動作させるためには、以下の環境が必要です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node.js: バージョン ≥18.13, 20, または 22 が必要です。初めてインストールする場合は、LTS（長期サポート）バージョンの利用が推奨されています。現在のNode.jsのバージョンはコマンド node -v で確認できます。&lt;/li&gt;
&lt;li&gt;NPM (Node Package Manager): バージョン 7 以上が必要です。&lt;/li&gt;
&lt;li&gt;Git: Gitがインストールされている必要があります。Gitがインストールされていない場合は、インストールする必要があります。GitHubへの登録も推奨されています。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの要件を満たすことで、Evidenceをローカル環境にインストールし、データプロダクトの構築を開始することができます。&lt;/p&gt;
&lt;h5 id=&#34;現在のnodejsのバージョンの確認方法&#34;&gt;現在のNode.jsのバージョンの確認方法&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;node -v
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;最新のnodejsへの更新方法&#34;&gt;最新のNode.jsへの更新方法&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scoop update nodejs-lts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;npmのバージョン確認方法&#34;&gt;npmのバージョン確認方法&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm -v
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;gitのインストール方法&#34;&gt;gitのインストール方法&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scoop install git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;evidenceのインストール方法&#34;&gt;Evidenceのインストール方法&lt;/h3&gt;
&lt;p&gt;Evidenceには幾つかのインストールパターンがありますが、ダッシュボード開発時にはVisual Studio Codeと専用の拡張機能の利用が推奨されます。&lt;/p&gt;
&lt;p&gt;本アーティクルでは、基本的には&lt;a href=&#34;https://scoop.sh&#34;&gt;Scoop&lt;/a&gt;で環境構築を行っています。
scoopがインストールされている場合は以下のコマンドでnode.jsやNPMを展開できます。
scoopを利用することで、バージョンの管理、アップデートは容易になります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scoop install nodejs-lts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;なお、本アーティクル以降ではVisual Studio Codeでの構築を行っていきますので、Visual Studio CodeにEvidenceの拡張機能を導入してください。&lt;/p&gt;
&lt;p&gt;また、これらのインストール中にエラーが生じた場合には、そのステップに応じて、&lt;a href=&#34;https://scoop.sh&#34;&gt;Scoop&lt;/a&gt;やVisual Studio Code、&lt;a href=&#34;https://evidence.dev&#34;&gt;Evidence&lt;/a&gt;のドキュメントを参照してください。&lt;/p&gt;
&lt;h3 id=&#34;システム構成の概要-1&#34;&gt;システム構成の概要&lt;/h3&gt;
&lt;p&gt;ダッシュボード開発時の典型的な構成は以下のようになります。&lt;/p&gt;</description>
    </item>
    <item>
      <title>EvidenceによるBI入門 #002.5</title>
      <link>https://technow.grayrecord.com/post/evidence-0025/</link>
      <pubDate>Thu, 20 Mar 2025 00:00:00 +0900</pubDate>
      <guid>https://technow.grayrecord.com/post/evidence-0025/</guid>
      <description>&lt;p&gt;今回はちょっとだけ箸休め的にScoopによる環境構築を多少補足します。&lt;/p&gt;
&lt;p&gt;本シリーズでは基本的には、環境構築は&lt;a href=&#34;https://scoop.sh/&#34;&gt;Scoop&lt;/a&gt;を用いることを前提としています。&lt;/p&gt;
&lt;p&gt;Scoopはコマンド一つで様々なパッケージを展開可能なツールです。&lt;/p&gt;
&lt;p&gt;Scoopは悪い意味ではまっとうなパッケージマネージャではありません。しかし、以下の条件の元では極めて有効に働きます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You&amp;rsquo;re a programmer/developer&lt;/li&gt;
&lt;li&gt;You want to set up a machine without having to visit a bunch of websites, download installers and then click through each one&lt;/li&gt;
&lt;li&gt;You&amp;rsquo;re comfortable working on the command line, especially with tools like Git&lt;/li&gt;
&lt;li&gt;You&amp;rsquo;re familiar with UNIX tools, and you wish there were more of them on Windows&lt;/li&gt;
&lt;li&gt;You read Hacker News and you feel like you&amp;rsquo;re &amp;lsquo;stuck&amp;rsquo; on Windows and missing out on lots of cool things&lt;/li&gt;
&lt;li&gt;You wish there was an easier way to tell other developers how to install programs (maybe your own programs)&lt;/li&gt;
&lt;li&gt;You use Homebrew/apt-get and think, &amp;ldquo;this is awesome&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/ScoopInstaller/Scoop/wiki/So-What&#34;&gt;https://github.com/ScoopInstaller/Scoop/wiki/So-What&lt;/a&gt; より。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
