投稿者: koji

  • AIの苦手分野

    まえがき

    『わたしが考えるAIの苦手分野は3つあり、2041年の時点でもこれらの欠点を補えていないはずだ。』

    リスト

    あとがき

    前書きを含めて、カイフー・リー(李 開復)、チェン・チウファン(陳 楸帆)『AI 2041 人工知能が変える20年後の未来』 (文藝春秋、2022年)より。リストは本文からの部分的な引用です。

    ざっくり言って頭(創造性)・心(共感)・体(器用さ)。著者はこの3分野をふまえ、AIに代替される、AIがパートナーになる、AIでは代替しづらい職業を予測しています。

    AIが代替しづらいのは、認知系職業(いわゆるホワイトカラー)では、創造性(創造的作業-単純作業)と社会性(社会的-非社会的)を軸としたマトリクスにおける「創造的×社会的」な仕事。身体系職業では、器用さ(器用-機械的)と社会性(社会的-非社会的)を軸としたマトリクスにおける「器用×社会的」な仕事。

    リストとは関係ないのですが、本書の表紙にある著者名のカタカナ表記、一人めは名・姓で二人めは姓・名と逆になっています。誰かのこだわりなんだろうか。

    この本からの他のリスト

  • 言語進化の理論が満たすべき7つの基準

    まえがき

    『言語が進化したのはなぜかを知ることが絶対に不可能というわけではない。実際、仮説の良し悪しを評価する基準を無理やりにでも設定してやれば、もっともらしさの順に仮説を整理することはできる。』

    リスト

    あとがき

    まえがきを含めて、ケヴィン・レイランド『人間性の進化的起源: なぜヒトだけが複雑な文化を創造できたのか』 (勁草書房、2023年)より。リストは本文からの引用です。

    言語の進化がいかに独特なものかがわかりやすく説かれている箇所を引用します。

    言語の進化には大転換が必要だったと思われる。それは、互いに独立で生得的な信号を使って行う、「目の前で起こっている具体的なこと」を伝えるコミュニケーションから、学習によって獲得され、社会的に伝達され、はてしなく組み合わせることができる、一般化可能で、柔軟性があり、機能が制限されない、指示的コミュニケーションへの大転換だ。言語学者のデレク・ビッカートンは、「言語はなんらかの先行システムから進化したにちがいないのだが、そのような先行システムがなんだったかは皆目見当もつかない[1]」と、言語進化のパラドクスを見事に表現した。

    ではどうするか。仮説の良し悪しを評価する基準を設定することで、最も「もっともらしい」仮説を選ぶわけです。リストの内容がよかったからというよりは、この発想を覚えておきたくて収集しました。「正解などない」と言って思考停止する前にトライしてみたい。

    ところでこの7つはどこから来たのか。著者は次のように述べています。

    私は、サボルチュ・サマードとイロス・サトマリ[2]、およびデレク・ビッカートン[1]の先駆的研究によって提案された、競合する言語進化理論たちの妥当性を判断する六つの基準に倣うことにした。ここにもう一つの基準を私が加え[3]、あわせて七つの基準を使って、最初期の言語がもっていた本来の適応的意義に関する仮説を評価しようというのがねらいだ。

    そして著者は、この7つの基準を満たす仮説として教示仮説というものを支持しています。これは『言語は教示の効率とその適用範囲を向上させるために進化した』という仮説。

    単に伝えるのではなく「教える」という文化的な行為が言語を進化させた。mansplaining という言葉がありますが、人が教え好きなのには根深い理由があるかもしれません。

      参考文献

      [1] Bickerton, Derek. Adam’s tongue: how humans made language, how language made humans. Macmillan, 2009.

      [2] Számadó, Szabolcs, and Eörs Szathmáry. “Selective scenarios for the emergence of natural language.” Trends in Ecology & Evolution 21.10 (2006): 555-561.

      [3] Odling-Smee, John, and Kevin N. Laland. “Cultural niche construction: evolution’s cradle of language.” The prehistory of language 11 (2009): 99.

    • 日々、小さなアンラーンを実践するための8つの方法

      まえがき

      『アンラーンの基本動作は、「思考や行動、動作が無自覚のままに固定化・パターン化されていないかを自問する」ことです。』

      リスト

      あとがき

      まえがきを含めて、柳川 範之、為末 大『Unlearn(アンラーン) 人生100年時代の新しい「学び」』 (日経BP、2022年)より。リストは目次からの引用です。

      本にはもちろん項目ごとの解説がありますが、なんとなく予想できるのでは。

      個人的には、仕事を言葉だけで・専門用語抜きで表現するというのが面白かった。『あえて情報量をセーブして動作や仕事を言語化することで「本質」にフォーカスする』ことができるとのこと。

      • 非行少年に共通する特徴5点セット+1

        まえがき

        『これまで少年院の中で数百人の非行少年と面接を繰り返してきました。質や程度はさまざまですが、彼らには(略)いくつかに分類できる類似点があることが分かってきました。』

        リスト

        あとがき

        まえがきを含めて、宮口 幸治『ケーキの切れない非行少年たち』 (新潮社、2019年)より。リストは本文からの引用です。

        「+1」の身体的不器用さについては、『小さい頃からスポーツ等を経験し身体機能が優れ、不器用さが当てはまらないケースもあるため、あえて「+1」としています』とのこと。本書ではこれらの特徴の一つひとつに対処する具体的な方法を考えています。

        このリストからずいぶん離れた場所にあった『こうやってこうやったらこうなる、といった論理的思考は、「思索の深さ」とも呼ばれています。』という一文が気になりました。そういった用語があるのだろうか。

        • 本当に大事なことを教えてくれる「シンプル化の問い」

          まえがき

          『それぞれの問いから浮かび上がるのは、本当に大事なこと――つまり、自分にとって本当に大事な仕事は何か、ということ。』

          リスト

          あとがき

          まえがきを含めて、ジュリエット・ファント『WHITE SPACE ホワイトスペース: 仕事も人生もうまくいく空白時間術』 (東洋経済新報社、2022年)より。リストは本文及び図表を編集しつつ引用しました。

          各項目の後半のカッコ部分は、(〈強み〉が〈リスク〉にならないように)という意味です。

          著者は『企業、チーム、そして働く人間を前に進ませる力』であるこれら4つの〈強み〉を、あえて「時間泥棒」と呼んでいます。なぜならば〈強み〉はともすると〈リスク〉に転じてしまうから。

          〈強み〉を〈リスク〉にしないための問いがこの4つ。

          • WordPress: フックに登録した無名関数を削除する

            WordPressではフックというコード中に埋め込まれたラベルにコールバックを登録することで機能を拡張できます。

            次の例では、'render_block_core/paragraph' というフィルターフックに 'lf_render_p' というコールバックを登録しています。このフックは段落ブロックを書き出す直前に置かれているので、すべての段落ブロックに ABC という文字が追加されることになります。

            // 全段落ブロックに ABC を追加
            function lf_render_p( $block_content, $block, $instance ) {
                return $block_content.'<p>ABC</p>';
            }
            add_filter( 'render_block_core/paragraph', 'lf_render_p', 10, 3 );
            

            コールバックにデータを渡すには、コールバックを無名関数とし、use() を使います。次の例では呼び出し側でセットした $message がすべての段落ブロックに追加されます。

            // 全段落ブロックに任意の文字列を追加
            $message = 'XYZ';
            add_filter( 'render_block_core/paragraph',
                function( $block_content, $block, $instance ) use( $message ) {
                    return $block_content.'<p>'.$message.'</p>';
                }, 10, 3 );

            コールバックを削除したいこともあります。たとえば、最初の段落ブロックにのみ文字を追加したいとします。コールバックが最初に呼ばれたときに削除してしまえばよいわけですから、次のように remove_filter() 関数を使えば実現できます。ちなみに3行目はフックやコールバックをハードコードせずに済む便利な表現です。

            // 最初の段落ブロックだけに ABC を追加
            function lf_render_p( $block_content, $block, $instance ) {
                remove_filter( current_filter(), __FUNCTION__ );
                return $block_content.'<p>ABC</p>';
            }
            add_filter( 'render_block_core/paragraph', 'lf_render_p', 10, 3 );

            2番目の例のように無名関数をコールバックにした場合には、Callable とするために無名関数を変数に納め、それを渡します。

            // 最初の段落ブロックだけに任意の文字列を追加
            $message = 'XYZ';
            $lf_render_p = function( $block_content, $block, $instance )
                use( &$lf_render_p, $message ) {
                    remove_filter( current_filter(), $lf_render_p );
                    return $block_content.'<p>'.$message.'</p>';
                };
            add_filter( 'render_block_core/paragraph', $lf_render_p, 10, 3 );

            use() が引き渡すのは実行時の内容でなく関数が定義された時点の内容なので、$lf_render_p を参照渡ししています。

          • 因果関係の信頼度を評価する4つの妥当性

            まえがき

            『サイエンスの世界では、研究結果や論文の内容がどの程度真実なのかを判断するために「妥当性の評価」を行います。(略)本当に因果関係があるかどうかを検証するためには、この4つを全部疑わなければいけません。』

            リスト

            あとがき

            まえがきを含めて、牧 兼充『科学的思考トレーニング 意思決定力が飛躍的にアップする25問』 (PHP研究所、2022年)より。リストは本文を少し編集して引用しました。またカッコ内には妥当性が低い例を、やはり本文を編集して添えています。

            4つのValidityそれぞれにWikipedia(英語版)のエントリーがあります。

            • WordPress: 投稿数を年別に集計する

              「このサイトについて」ページに、投稿数の年別累計グラフを表示しています。

              このグラフを作るためには次のようなデータが必要です。

              $years = [ 2005, 2006, ... ] //横軸(年)
              $counts = [ 100, 200, ... ] // 縦軸(累積投稿数)

              取得方法をいくつか検討しました。

              1. wp_get_archives()を使う

              wp_get_archives()を使うと、年別のアーカイブ(記事一覧)ページへのリンクと投稿数を得ることができます。ただし問題が2つ。

              まず、得られるのが次のようなHTML文字列であるということ。

              <li><a href=\'https://listfreak.com/date/2006\'>2006</a> (114)</li>

              そのまま表示するには都合がよいのですが、いま必要なのはグラフの横軸に使う投稿があった年の配列と、縦軸に使う年ごとの投稿数の累積値の配列です。したがって、生成されたHTMLから年と投稿数を切り出す必要があります。

              次に、カテゴリ別に投稿数を絞り込むパラメータが無いこと。当サイトはpostという投稿タイプの中にlistカテゴリのリスト投稿とblogカテゴリのブログ記事があり、集計したいのはlistカテゴリの記事だけです。したがって、何らかの方法でlistカテゴリの記事だけを集計しなければなりません。

              上記を踏まえ、次のようなコードを書きました。

              add_filter( 'getarchives_join', 'lf_getarchives_join', 10, 2 );
              
              $out = wp_get_archives( [
              	'type'            => 'yearly',
              	'show_post_count' => true,
              	'echo'            => false,
              	'order'           => 'ASC',
              ] );
              
              remove_filter( 'getarchives_join', 'lf_getarchives_join' );
              
              // 生成されたリストから年と投稿数を切り出す
              preg_match_all(
                  '|\>(\d+)\</a.+\((\d+)\)\</li|',
                  $archives,
                  $matches
              );
              
              // 年を数値に変換
              $years = array_map( 'intval', $matches[1] );
              
              // 年別投稿数を数値に変換して累積値を取得
              $counts = [];
              foreach ( $matches[2] as $i => $match ) {
                  $counts[] += (int)$match + ( $counts[$i-1] ?? 0 );
              }
              
              function lf_getarchives_join( $sql_join, $parsed_args ) {
              	return "
              	JOIN wp_term_relationships AS tr ON wp_posts.ID = tr.object_id 
              	JOIN wp_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id AND tt.taxonomy = 'category'
              	JOIN wp_terms AS t ON tt.term_id = t.term_id AND t.name='list'
              	";
              }

              そして $years を横軸に、$counts を縦軸にしたグラフを描画させます。

              2. SQLを直接発行する

              JOIN句をずらずら書かなければいけないのなら、標準関数を使わずSQLを発行するのも手です。

              $query = "SELECT YEAR(post_date) AS year, COUNT(post_date) AS count
              FROM wp_posts AS p
              JOIN wp_term_relationships AS tr ON p.ID = tr.object_id 
              JOIN wp_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id AND tt.taxonomy = 'category'
              JOIN wp_terms AS t ON tt.term_id = t.term_id AND t.name='list'
              WHERE p.post_status='publish' AND p.post_type='post'
              GROUP BY YEAR(post_date)";
              $publists = $wpdb->get_results( $query );
              
              // グラフの横軸(年)と縦軸(累積投稿数)データを取得
              foreach ( $publists as $i => &$publist ) {
              
                  // 前年の投稿数(初年度の前年は0)を加算
                  $publist->count += ( $publists[$i-1]->count ?? 0 );
              
                  $years[]  = $publist->year;
                  $counts[] = $publist->count;
              }

              3. 標準関数を組み合わせる

              最初の投稿と最新の投稿の年を取得したうえで、年ごとの投稿数を取得していきます。wp_get_archives()の存在を知らなかった頃に作りました。

              // 全クエリ共通
              $query_base = [
                  'post_type'      => 'post',
                  'post_status'    => 'publish',
                  'category_name'  => 'list',
              ];
              
              foreach( [ 'ASC', 'DESC' ] as $order ) {
                  $query = new WP_Query( $query_base + [
                      'posts_per_page' => 1,
                      'orderby'        => 'date',
                      'order'          => $order,
                  ] );
              
                  // 投稿日の最初の4文字を数値化して投稿年を取得
                  $date = $query->posts[0]->post_date;
                  $year[$order] = intval( substr( $date, 0, 4 ) );
              }
              
              // 投稿数の年別累計値を取得
              $years = $counts = [];
              for( $y = $year['ASC']; $y <= $year['DESC']; $y++ ) {
                  $query = new WP_Query( $query_base + [
                      'posts_per_page' => 1, // ヒット件数(found_posts)だけわかればよいので実データは最小
                      'fields'         => 'ids', // ID のみ
                      'year'           => $y,
                  ] );
              
                  $years[]  = $y;
                  $counts[] = ( $counts[$y-1] ?? 0 ) + $query->found_posts;
              }

              どれを採用するか

              SQL文の発行回数が少ない順はおそらく 2、1、3。ただし2はオブジェクトキャッシュを実装する必要があります。

              変更に強そうなのは 3、2、1 でしょうか。2本来隠蔽されているべきDBアクセスを直書きしています。加えて1は標準関数の吐き出すHTMLの構造が変われば正規表現も変えねばなりません。

              とりあえず1を選んでみます。

            • 業務を円滑に進行させない方法 (CIA)

              まえがき

              『アメリカきっての優秀な情報部員たちが、テロ組織の運営や効率性を妨げるために考案した戦略の実例を紹介しよう。ターゲットとして、典型的なアメリカ企業の役員会議を想定してもいい。』

              リスト

              あとがき

              まえがきを含めて、ジェニファー・アーカー、ナオミ・バグドナス『ユーモアは最強の武器である: スタンフォード大学ビジネススクール人気講義』 (東洋経済新報社、2022年)より。

              実在するようですね[1]。まえがきを含む部分を本文から引用します。

              世界屈指のある巨大企業を担当するシニア経営コンサルタントのジョン・ヘンリーは、(略)中央情報局(CIA)の「シンプル・サボタージュ・フィールド・マニュアル」を虎の巻としている。アメリカ政府関係者が考案した、テロ組織を内側から破壊するためのマニュアルだ。もともと第二次世界大戦中に戦略事務局(OSS)が開発したこのマニュアルは、CIAいわく「業務を円滑に進行させない方法を教える」ためのガイドだった。

              この本からの他のリスト

              参考文献

              [1] The Art of Simple Sabotage – CIA

            • 優れた交渉人が心得ている4つのポイント

              まえがき

              『心理学者のニール・ラッカムが率いたチームによる古典的な研究では、プロの公証人のテクニックが分析されている。』

              リスト

              あとがき

              まえがきを含めて、アダム・グラント『THINK AGAIN 発想を変える、思い込みを手放す』 (三笠書房、2022年)より。

              ニール・ラッカムといえば SPIN ですね。面白そうな研究ですが、残念ながら文献は示されておらず、まだ探せていません。

              この研究の紹介の後で述べられていた文章も印象的でしたので引用します。

              近年の実験結果から、科学者のような謙虚さと探究心を持つ交渉人が一人その場にいるだけで、双方の当事者が納得できるような結果に改善されることが明らかになっている。謙虚で探求心のある交渉人は、より多くの情報を探り、双方に利益をもたらす方法を見出すからだ。交渉相手にどのように考えるべきかなどの指図はしない。一緒にダンスをするように働きかけているだけなのだ。