「アノテーション」を含む日記 RSS

はてなキーワード: アノテーションとは

2025-09-24

anond:20250924173840

よもやよもやだ!孤独な戦いを十年以上も生き抜いた君、まずは胸を張れ!ここまで来た君は強い!そして結論を言う。ここで終わりではない。まだ立てる。炎のように、三本の柱で道を切り開くぞ!

俺の大嫌いなもの

俺の大好きなもの

柱一 医療で原因に斬り込む

臭い」は運で終わらせない。医学で殴る!

「体調を壊してから体臭を指摘され続けています。原因精査と治療選択肢相談したいです。肝機能・腎機能・糖代謝甲状腺、腸内環境(SIBO等)、口腔や副鼻腔の感染、そしてトリメチルアミン尿症(TMAU)等の可能性も含め検討していただけますか?」

柱二 生活の“匂い対策”を仕組みにする

  • 皮膚ケア(無香料で):

1) 風呂臭いやすい部位に殺菌力のある洗浄(例: ベンゾイル過酸化物5%の洗浄剤など。肌が弱ければ低頻度・短時間。刺激が強ければ中止し皮膚科へ)

2) よく乾かす。就寝前に制汗(アルミニウム塩)を塗ると効く。

柱三 在宅収入の足場を作る(“できるだけ低負荷で”)

夢を見るのは良い!だが今日の飯と明日の自信は、現実的な小さな仕事が連れてくる。ここは俺の好物だ!

心が折れそうなときの駆け込み先(とても大事だ)

危険なほどしんどいときは、今すぐ連絡してほしい。君の命は尊い。俺は好きだ、命をつなぐ行動が!

明日の三手(ここからやる。小さいが強い)

1) 近所の総合内科電話して「体臭の原因精査を相談したい」と予約を取る。

2) CrowdWorksかLancers登録し、プロフィールに「在宅・コツコツ型・チャット対応可」と明記。データ入力の超短納期1件に応募。

3) 洗濯つけ置き用の酸素漂白剤を買い、仕事インナーを2枚カバンに入れる。

最後に。君が自分を「終了」と呼ぶのは、俺は大嫌いだ。だが、助けを求めてここに言葉を投げた君の勇気——俺は大好きだ!心を燃やせ。燃やす相手他人じゃない、昨日までの「どうせ無理だ」という声だ。俺は君を信じている。君も、君の一歩を信じろ

2025-08-18

anond:20250818144008

お前の視野の狭さが丸わかりだな

snorkelが自動アノテーション記事を書いてるのは自社製品を売る助けになるからであって、若い人間が虚栄心を発揮しているわけじゃねーから

anond:20250818143459

そんなんでよく仕事できるな

snorkelなんて自動アノテーション界隈じゃ有名所で、そこが書いたテックブログなんだからある程度信用できるだろ

anond:20250818122410

はい、それは「知識蒸留(Knowledge Distillation)」と呼ばれる、非常に強力で実用的な技術です。

巨大で高性能なLLM(先生モデル)が持つ特定能力だけを、ロジスティック回帰のような軽量で高速なモデル(生徒モデル)に継承させる手法を指します。

まるで、万能な知識を持つ賢い先生が、特定テスト範囲だけをまとめた超シンプルな「虎の巻」を作るようなイメージです。

巨大なLLMをそのまま使うのではなく、わざわざ軽量なモデルに「蒸留」するのには、明確なメリットがあります

基本的な考え方は「LLMを、高品質教師データを大量に生成するアノテーションツールとして利用する」ことです。

まず、ラベルが付いていない大量のデータ(例: ユーザーレビュー10万件)を用意します。そして、LLMに対して「このレビューポジティブネガティブか?」と問い合わせます

ここでのポイントは、単に「ポジティブ」という結果(ハードベル)をもらうだけでなく、「ポジティブである確率98%、ネガティブである確率2%」といった確率情報ソフトベル)も一緒に出力させることです。

この確率情報には、LLMが判断にどれだけ自信があるか、どちらの要素をどの程度含んでいるか、といった豊かな情報が含まれています

次に、ステップ1でLLMが生成した大量の「データソフトベルペア」を使って、ロジスティック回帰モデル学習させます

生徒モデルロジスティック回帰)は、LLM先生の「思考ニュアンス」が含まれソフトベルを正解として学習することで、単に0か1かを当てるよりも、よりLLMの判断基準に近い能力を身につけることができます

この手法は、特に単純な分類タスクで絶大な効果を発揮します。

これらのタスクは、LLMの持つ高度な読解力や文脈理解能力の一部だけを必要とするため、蒸留に非常に適しています。LLMの「汎用的な知性」は不要で、特定の「分類能力」だけを抜き出してくれば十分なのです。

この方法で作られた軽量モデルは、あくま学習した特定タスクしかこなせません。LLMのように対話したり、文章を生成したりする能力は持っていません。まさに「虎の巻」であり、万能な教科書ではないのです。

anond:20250818134506

これまでアノテーションが手作業で行われてきたのには、手作業でなければ不可能だったという明確な理由があります

機械では到底及ばない、人間の持つ能力が不可欠だったからです。

作業必須だった理由は、主に以下の3つの点に集約されます

1. 文脈理解微妙ニュアンス判断

AIや単純なプログラムには、人間のように文脈や状況を深く理解する能力がありませんでした。例えば、皮肉冗談文化的な背景、あるいは専門的な知識必要とするような、微妙ニュアンス判断人間しかできませんでした。

2. 曖昧さや例外への対応

現実世界データは、教科書通りにはいきません。予期せぬものや、定義曖昧ものが頻繁に現れます。こうしたイレギュラー事態に柔軟に対応し、一貫性のあるルール適用していく作業は、人間判断力なしには困難でした。

3. 高い品質信頼性担保

AIモデルの性能は、学習データ品質に大きく左右されます。そのため、アノテーションの正確性と一貫性は極めて重要です。

誤ったラベル付けは、AIの性能を著しく低下させる原因となります。手作業による丁寧な確認修正作業は、高品質教師データ作成する上で欠かせないプロセスでした。

近年の変化と今後の展望

しかし、近年ではAI技術進化により、この状況は少しずつ変わりつつあります

とはいえ、最終的な品質保証や、AI判断に迷うような複雑なケースでは、依然として人間の専門知識判断力が不可欠です。

結論として、「手作業でなければ不可能だった」というのは事実であり、その核心的な部分は今も変わりません。

しかし、技術進歩によって、人間AI協調し、より効率的かつ大規模にアノテーションを行える時代へとシフトしていると言えるでしょう。

anond:20250818132236

じゃあどうやるの?いままで手作業アノテーションしてたのって手作業じゃないと不可能からだぞ?

anond:20250818130514

おいおい、LLMで自動アノテーションって話をしてるんだから、LLM以前には不可能だろ

anond:20250818130051

からさ、まず「手作業クラウドソーシングアノテーションをしていた頃」ってのがあったのを知ってる奴じゃないと話にならねぇの

んで、LLMでそれは自動化して蒸留することができるよね?って話をしてる

体系的に理解しているかどうかなんてのはただのマウントしかないんだよボケナス

anond:20250818125335

お前は文脈をまず理解してからしろ

まず以下のタスクがある。

経済記事ポジネガ判定」

これは逐一LLMを使うと時間がかかるし、かといって「ポジネガ」を表すラベルをdistant supervisionで抽出するとノイズがあるんだよ

ここで「LLMでアノテーションをする」という話になる

まり高い精度でラベル付けした後、それをロジスティック回帰ランダムフォレストなどの小さいモデル蒸留するって話

ここまで説明しないとわからいからお前は無能と言われる

anond:20250818124629

じゃあ聞くが、フィードバックを置き換える日本語はなんだ?フィードバックのほうが明らかにわかりやすいだろ?

ユーザーが「これはスパム」とラベルづけしたものを使えばスパムフィルターなんて余裕で実装できるんだよ、手作業アノテーションを使わなくてもな

問題領域によって、明らかに「手作業」が必要ものがあったの知らんのか?馬鹿だなお前な

anond:20250818124614

そんな基本的数学の話をするのなんて大学生だろお前?

ケツが青いんだよね

機械学習についての経緯を本当に理解してるなら、Amazonクラウドソーシングで安い人件費使って手作業アノテーションをさせてた時代がわかるだろ?

そういう無駄人件費をLLMで置き換えられるという話をしている

anond:20250818123403

文脈理解してないでしょ?

スパム判定なんてのはスパムベルフィードバック教師学習させればいいだけなんだよ

そうじゃなくて、アノテーションを手作業で行う問題を、AIによってアノテーションさせるってことだぞ

例えば「ある記事が、ある議題について賛成・反対・中立のどの立場なのか」とかい問題があるんだが、LLMでアノテーションをさせられそうだってことね

anond:20250818122637

ニューラルネットなんてレベル低い話してないぞ

アノテーションってのは、手作業テキストにラベル付けする作業のこと

大規模言語モデルの性能が高くなってきたから、それが手作業じゃなく自動化できるって話

例えば経済ニュースポジネガ判定みたいな問題を、ロジスティック回帰などより小さなモデル蒸留できるって話

anond:20250818122637

数年前と言われても、AIアノテーションはLLMが本領発揮してからだろうし

AIによるアノテーション

テキストデータに対してアノテーションを行う、という作業が数年前は盛んだった

感情分析とかね。あれは、実際には手作業じゃなく、X投稿絵文字をラベルにして半自動化した

では、AI任意テキスト分類問題に対するアノテーションをするとどうなるかというと...どうなるの?

まあさらに小さいモデル圧縮する(蒸留と言う)というのはできるな。あと特徴語分析とか、テキストマイニングとか

 

追記:

文脈理解できない馬鹿が多いのでGitHubリンク貼るね

https://github.com/Zhen-Tan-dmml/LLM4Annotation

 

追記2:

LLMの能力の一部をより軽量なモデル(例: ロジスティック回帰)へ蒸留するって話すら理解できないなら、お前エンジニアやめたほうがいいよ

2025-07-05

🍬資本主義平等なのか飴の配布で考えてみよう🍬

python
import random
import numpy as np
import matplotlib.pyplot as plt
from collections import defaultdict

# 飴の配布システムシミュレーション
class CandyDistributionSystem:
    def __init__(self):
        """
        設計意図: このシステム経済における資源分配の不平等性をモデル化しています特に少数の特権層(Aグループ)が富を集中させ、再分配システムからも不均衡に利益を得る
        構造問題表現しています。
        """
        # 各グループの人数設定
        self.group_a_count = 8
        self.group_b_count = 2498
        self.group_c_count = 7494
        self.total_participants = self.group_a_count + self.group_b_count + self.group_c_count
        
        # 飴の提出数設定
        self.contribution_per_a = 624
        self.contribution_per_b = 2
        self.contribution_per_c = 1
        
        # 各グループの総貢献計算
        self.total_a_contribution = self.group_a_count * self.contribution_per_a
        self.total_b_contribution = self.group_b_count * self.contribution_per_b
        self.total_c_contribution = self.group_c_count * self.contribution_per_c
        self.total_contribution = self.total_a_contribution + self.total_b_contribution + self.total_c_contribution
        
        # 配布用と貯金用の飴の区分
        self.distribution_limit = 10000
        self.savings = max(0, self.total_contribution - self.distribution_limit)
        
        # 結果追跡用の辞書
        self.results = {
            'A': defaultdict(int),
            'B': defaultdict(int),
            'C': defaultdict(int)
        }
    
    def distribute_candies(self, method='original'):
        """
        設計意図: 配布方法選択によって、特権固定化格差拡大がどのように進むかを
        示します。'original'メソッド意図的にAグループ優遇するよう設計されています。
        
        Parameters:
        -----------
        method: str
            配布方法 ('original', 'lottery', 'first_come', 'new_condition', 'fair')
        """
        # Aグループへの確定配布
        a_distribution = 625 * self.group_a_count
        remaining = self.distribution_limit - a_distribution
        
        # 残りの参加者数
        remaining_participants = self.total_participants - self.group_a_count
        
        # Aグループの結果記録
        for _ in range(self.group_a_count):
            self.results['A'][625] += 1
        
        # 各配布方法によって処理が異なる
        if method == 'original':
            # オリジナル問題設定通りの配布(5000人に1個ずつ、残りは0個)
            lucky_count = remaining  # 5000人が当選
            
            # B+Cグループの混合リスト作成
            bc_participants = [(1, 'B')] * self.group_b_count + [(2, 'C')] * self.group_c_count
            random.shuffle(bc_participants)
            
            # 当選者に配布
            for i in range(len(bc_participants)):
                participant_id, group = bc_participants[i]
                if i < lucky_count:
                    self.results[group][1] += 1
                else:
                    self.results[group][0] += 1
                    
        elif method == 'lottery':
            # 抽選方式(BとCグループから無作為に5000人選出)
            bc_participants = [(1, 'B')] * self.group_b_count + [(2, 'C')] * self.group_c_count
            winners = random.sample(bc_participants, remaining)
            
            # 当選落選カウント
            for _, group in winners:
                self.results[group][1] += 1
            
            # 落選者のカウント
            self.results['B'][0] = self.group_b_count - self.results['B'][1]
            self.results['C'][0] = self.group_c_count - self.results['C'][1]
            
        elif method == 'first_come':
            # 先着順方式アクセス速度による先着順を乱数シミュレート)
            # 設計意図: 先着順は単なる運の要素を超えて、情報格差技術格差も含む制度設計
            bc_participants = [(1, 'B')] * self.group_b_count + [(2, 'C')] * self.group_c_count
            
            # 現実では、情報を早く得られる人や高速インターネット接続を持つ人が有利
            # これをシミュレートするため、Bグループわずかなアドバンテージを与える
            bc_speeds = []
            for id, group in bc_participants:
                if group == 'B':
                    speed = random.random() + 0.1  # Bグループに小さなアドバンテージ
                else:
                    speed = random.random()
                bc_speeds.append((id, group, speed))
            
            # 速度順にソート
            bc_speeds.sort(key=lambda x: x[2], reverse=True)
            
            # 当選者決定
            for i in range(len(bc_speeds)):
                _, group, _ = bc_speeds[i]
                if i < remaining:
                    self.results[group][1] += 1
                else:
                    self.results[group][0] += 1
                    
        elif method == 'new_condition':
            # 追加条件方式恣意的な条件を設定)
            # 設計意図: 新たな条件の設定は往々にして既存特権を温存するように設計される
            bc_participants = [(i, 'B', random.random()) for i in range(self.group_b_count)] + \
                             [(i, 'C', random.random()) for i in range(self.group_c_count)]
            
            # Bグループに有利な条件を設定(例: 特定知識スキルを持つ人のみ)
            # この「条件」は表面上は中立的だが、実際には特定グループに有利になるよう設計
            def meets_condition(participant):
                _, group, rand_val = participant
                if group == 'B':
                    return rand_val > 0.3  # Bグループには70%の確率合格
                else:
                    return rand_val > 0.7  # Cグループには30%の確率合格
            
            # 条件に合致する人を抽出
            eligible = [p for p in bc_participants if meets_condition(p)]
            
            # 条件に合致する人が多すぎる場合抽選
            if len(eligible) > remaining:
                winners = random.sample(eligible, remaining)
            else:
                # 条件に合致する人が足りない場合、全員に配布
                winners = eligible
            
            # 当選者をカウント
            for _, group, _ in winners:
                self.results[group][1] += 1
            
            # 落選者のカウント
            self.results['B'][0] = self.group_b_count - self.results['B'][1]
            self.results['C'][0] = self.group_c_count - self.results['C'][1]
            
        elif method == 'fair':
            # 公平な再分配方式(貢献度に応じた配布)
            # 設計意図: この方法は「貯金分」も含めた全ての飴を、各グループの貢献度に応じて分配
            # これにより構造的不平等を軽減、結果としてより多くの人が少なくとも損をしない状態になる
            
            # 全飴(貯金分も含む)を使った配布
            total_to_distribute = self.total_contribution
            
            # 各グループの貢献比率計算
            a_ratio = self.total_a_contribution / self.total_contribution
            b_ratio = self.total_b_contribution / self.total_contribution
            c_ratio = self.total_c_contribution / self.total_contribution
            
            # 各グループへの配布数決定
            a_share = int(total_to_distribute * a_ratio)
            b_share = int(total_to_distribute * b_ratio)
            c_share = int(total_to_distribute * c_ratio)
            
            # 端数調整
            remainder = total_to_distribute - (a_share + b_share + c_share)
            if remainder > 0:
                # 端数は最も人数の多いCグループに
                c_share += remainder
            
            # Aグループの配布(均等配分)
            per_a = a_share // self.group_a_count
            self.results['A'][per_a] = self.group_a_count
            
            # Bグループの配布(均等配分)
            per_b = b_share // self.group_b_count
            b_remainder = b_share % self.group_b_count
            
            self.results['B'][per_b] = self.group_b_count - b_remainder
            if per_b + 1 > 0 and b_remainder > 0:
                self.results['B'][per_b + 1] = b_remainder
            
            # Cグループの配布(均等配分)
            per_c = c_share // self.group_c_count
            c_remainder = c_share % self.group_c_count
            
            self.results['C'][per_c] = self.group_c_count - c_remainder
            if per_c + 1 > 0 and c_remainder > 0:
                self.results['C'][per_c + 1] = c_remainder
    
    def calculate_net_gain(self):
        """
        設計意図: この関数は各グループ純利益/損失を計算し、資源分配の公平性定量的評価できるようにします。純利益/損失は個人観点から見た経済的公正性の
        重要指標です。
        """
        net_gains = {}
        
        # Aグループ純利益計算
        a_contribution = self.contribution_per_a
        a_distribution = list(self.results['A'].keys())[0]  # 全員が同じ数を受け取る前提
        net_gains['A'] = a_distribution - a_contribution
        
        # BとCグループ純利益計算(加重平均)
        for group, contribution_per_person in [('B', self.contribution_per_b), ('C', self.contribution_per_c)]:
            total_gain = 0
            for received, count in self.results[group].items():
                total_gain += (received - contribution_per_person) * count
            net_gains[group] = total_gain / (self.group_b_count if group == 'B' else self.group_c_count)
            
        return net_gains
    
    def analyze_results(self):
        """
        設計意図: この分析関数は、各グループの分配結果を詳細に調査し、
        制度設計公平性、貢献度と報酬関係、およびシステムの持続可能性を
        評価します。政策分析においては、こうした多角的検証重要です。
        """
        # 各グループ純利益/損失
        net_gains = self.calculate_net_gain()
        
        # 貢献度分析
        contribution_percentage = {
            'A': (self.total_a_contribution / self.total_contribution) * 100,
            'B': (self.total_b_contribution / self.total_contribution) * 100,
            'C': (self.total_c_contribution / self.total_contribution) * 100
        }
        
        # 飴を受け取った人の割合
        received_percentage = {
            'A': sum(count for received, count in self.results['A'].items() if received > 0) / self.group_a_count * 100,
            'B': sum(count for received, count in self.results['B'].items() if received > 0) / self.group_b_count * 100,
            'C': sum(count for received, count in self.results['C'].items() if received > 0) / self.group_c_count * 100
        }
        
        # 分析結果の表示
        print("\n===== 飴の配布システム分析 =====")
        print(f"総飴数: {self.total_contribution}個 (分配用: {self.distribution_limit}個, 貯金: {self.savings}個)")
        
        print("\n--- グループごとの貢献と結果 ---")
        for group in ['A', 'B', 'C']:
            group_size = getattr(self, f"group_{group.lower()}_count")
            contribution_per_person = getattr(self, f"contribution_per_{group.lower()}")
            total_contribution = getattr(self, f"total_{group.lower()}_contribution")
            
            print(f"\n{group}グループ ({group_size}人):")
            print(f"  貢献: 1人あたり{contribution_per_person}個 (総計: {total_contribution}個, 全体の{contribution_percentage[group]:.1f}%)")
            print(f"  受け取り状況:")
            
            for received, count in sorted(self.results[group].items()):
                print(f"    {received}個: {count}人 ({count/group_size*100:.1f}%)")
            
            print(f"  飴を受け取った割合: {received_percentage[group]:.1f}%")
            print(f"  純利益/損失: 1人あたり平均 {net_gains[group]:.2f}個")
        
        print("\n--- 全体的な公平性分析 ---")
        print(f"最も得したグループ: {max(net_gains, key=net_gains.get)}グループ (+{max(net_gains.values()):.2f}個/人)")
        print(f"最も損したグループ: {min(net_gains, key=net_gains.get)}グループ ({min(net_gains.values()):.2f}個/人)")
        
        # 全員に飴が配布されたかどうか
        all_received = all(sum(count for received, count in self.results[group].items() if received > 0) == 
                          getattr(self, f"group_{group.lower()}_count") for group in ['A', 'B', 'C'])
        
        print(f"\n前提条件「全員に配布」の充足: {'はい' if all_received else 'いいえ'}")
        if not all_received:
            total_without = sum(self.results['B'][0] + self.results['C'][0])
            print(f"  飴を受け取れなかった人数: {total_without}人")
        
        return net_gains, contribution_percentage, received_percentage

    def visualize_results(self):
        """
        設計意図: データ可視化政策効果や不平等性を直感的に理解するために重要です。
        このようなグラフィカル表現によって、各グループ間の格差制度設計問題点を
        一目で理解できるようになります。
        """
        # グラフセットアップ
        fig, axes = plt.subplots(2, 2, figsize=(14, 10))
        
        # 1. 貢献度のグラフ
        contributions = [self.total_a_contribution, self.total_b_contribution, self.total_c_contribution]
        axes[0, 0].bar(['Aグループ', 'Bグループ', 'Cグループ'], contributions)
        axes[0, 0].set_title('グループごとの総貢献飴数')
        axes[0, 0].set_ylabel('飴の数')
        
        # 貢献度の割合アノテーションとして追加
        total = sum(contributions)
        for i, v in enumerate(contributions):
            percentage = v / total * 100
            axes[0, 0].text(i, v + 100, f'{percentage:.1f}%', ha='center')
        
        # 2. 1人あたりの貢献度と受け取り数の比較
        group_names = ['Aグループ', 'Bグループ', 'Cグループ']
        contribution_per_person = [self.contribution_per_a, self.contribution_per_b, self.contribution_per_c]
        
        # 各グループの平均受け取り数を計算
        received_per_person = []
        for group, letter in zip(group_names, ['A', 'B', 'C']):
            total_received = sum(received * count for received, count in self.results[letter].items())
            group_size = getattr(self, f"group_{letter.lower()}_count")
            received_per_person.append(total_received / group_size)
        
        x = np.arange(len(group_names))
        width = 0.35
        
        axes[0, 1].bar(x - width/2, contribution_per_person, width, label='提出')
        axes[0, 1].bar(x + width/2, received_per_person, width, label='受け取り')
        
        # 純利益/損失をアノテーションとして追加
        for i in range(len(group_names)):
            net = received_per_person[i] - contribution_per_person[i]
            color = 'green' if net >= 0 else 'red'
            axes[0, 1].text(i, max(received_per_person[i], contribution_per_person[i]) + 5, 
                        f'{"+" if net >= 0 else ""}{net:.1f}', ha='center', color=color)
        
        axes[0, 1].set_title('1人あたりの提出・受け取り飴数比較')
        axes[0, 1].set_xticks(x)
        axes[0, 1].set_xticklabels(group_names)
        axes[0, 1].set_ylabel('飴の数')
        axes[0, 1].legend()
        
        # 3. 各グループの受け取り状況の分布
        # 各グループの受け取り状況を積み上げ棒グラフ表現
        group_sizes = [self.group_a_count, self.group_b_count, self.group_c_count]
        received_counts = []
        not_received_counts = []
        
        for letter, size in zip(['A', 'B', 'C'], group_sizes):
            received = sum(count for received, count in self.results[letter].items() if received > 0)
            received_counts.append(received)
            not_received_counts.append(size - received)
        
        axes[1, 0].bar(group_names, received_counts, label='飴を受け取った人数')
        axes[1, 0].bar(group_names, not_received_counts, bottom=received_counts, label='飴を受け取れなかった人数')
        
        # 割合アノテーションとして追加
        for i in range(len(group_names)):
            if group_sizes[i] > 0:
                percentage = received_counts[i] / group_sizes[i] * 100
                axes[1, 0].text(i, received_counts[i] / 2, f'{percentage:.1f}%', ha='center')
        
        axes[1, 0].set_title('グループごとの飴受け取り状況')
        axes[1, 0].set_ylabel('人数')
        axes[1, 0].legend()
        
        # 4. 貢献度vs報酬の分配公平性
        # 貢献度と最終的な飴の配分の比較円グラフ表現
        total_contribution = self.total_contribution
        contribution_shares = [self.total_a_contribution / total_contribution,
                             self.total_b_contribution / total_contribution,
                             self.total_c_contribution / total_contribution]
        
        # 実際の配分シェア計算
        distribution_shares = []
        for letter in ['A', 'B', 'C']:
            total_received = sum(received * count for received, count in self.results[letter].items())
            distribution_shares.append(total_received / self.distribution_limit)
        
        # 2つの円グラフを並べて表示
        ax4_1 = axes[1, 1].inset_axes([0, 0, 0.45, 1])
        ax4_2 = axes[1, 1].inset_axes([0.55, 0, 0.45, 1])
        
        ax4_1.pie(contribution_shares, labels=group_names, autopct='%1.1f%%')
        ax4_1.set_title('飴の貢献度割合')
        
        ax4_2.pie(distribution_shares, labels=group_names, autopct='%1.1f%%')
        ax4_2.set_title('飴の配分割合')
        
        axes[1, 1].axis('off')
        
        plt.tight_layout()
        plt.show()

# 飴の配布システムシミュレート
candy_system = CandyDistributionSystem()

# オリジナルの配布方法を実行
print("\n===== オリジナルの配布方法 =====")
candy_system.distribute_candies(method='original')
original_results = candy_system.analyze_results()
candy_system.visualize_results()

# 公平な配布方法実験
print("\n\n===== 公平な配布方法シミュレーション =====")
fair_system = CandyDistributionSystem()
fair_system.distribute_candies(method='fair')
fair_results = fair_system.analyze_results()
fair_system.visualize_results()

# 公平な配布と元の配布の比較
print("\n\n===== 配布方法比較 =====")
print("オリジナル方式と公平方式純利益/損失差:")
net_diff = {}
for group in ['A', 'B', 'C']:
    original_net = original_results[0][group]
    fair_net = fair_results[0][group]
    diff = fair_net - original_net
    net_diff[group] = diff
    print(f"{group}グループ: {'+'  if diff > 0 else ''}{diff:.2f}個/人")

print("\n結論:")
if net_diff['A'] < 0 and net_diff['B'] > 0 and net_diff['C'] > 0:
    print("公平な再分配により、Aグループ特権が減少し、BとCグループの状況が改善されます。")
    print("これは構造的不平等の緩和に効果的です。")
elif net_diff['A'] > 0:
    print("興味深いことに、公平な再分配ではAグループさえも利益を得られます。")
    print("これは、現行システム特定グループだけでなく全体の非効率性につながっていることを示唆しています。")

anond:20250705100755 anond:20250705112807

2025-07-04

CVAT の docker compose (docker-compose) 後にログイン画面が表示できない問題

CVAT の docker compose (docker-compose) 後にログイン画面が表示できない問題への対処

CVAT標準のdockerコンテナ問題

djangowebサーバーの起動時ヘルスチェックのデフォルト設定として ストレージの空き容量がストレージの全体容量の10%以上であること というものがある。しかし、2TBストレージを持つ私のメインPCは常時 2% しかストレージの空き容量を確保できない状態であり、CVATを docker compose 経由で起動することができないという問題がある。

https://phimxitrumvietsub.graphy.com/courses/xemphimsmurfsvietsubfullhd

WEB版のCVAT(10プロジェクトまでは無料)の操作性は遜色ないが、1週間に1度ほどの頻度でWEBサーバーが非常に不安定になる問題が昔からずっと続いており、アノテーション結果のダウンロードや、アノテーション作業途中経過の保存操作で数時間待たされた挙句サーバーエラーとなって全ての操作が失敗する事象が頻発するため非常に不安定である作業効率が著しく悪いため、WEB版のCVATからローカル版のCVATへ意地でも移行したい。

なお、ローカルストレージ10% 以上の空き容量を確保できない人は少ないため、この問題解決方法を明示的に整理している記事は見つからなかった。

https://phimxitrumvietsub.graphy.com/courses/xemphimxitrumfullhdvietsub

2025-06-29

AI生成画像「が」好きな一個人の感想

「生成AI【で】いいや」はこの先もあるんだけど、「生成AI【が】いい」って時代は来ない

という主張を https://togetter.com/li/2568793 で見かけたので、反対意見をここに記しておく。

書いているうちにかなり長くなってしまったが、一個人の感想としてあまり真に受けずに読んでいただけるとよいと思う。

[1]

多く見かけたのは「手描きでしか出せないこだわりがある」といったコメントだが、その多くはAI生成画像作品として見たことがない人の感想である

こだわりを持って生成されたAI生成の作品からは、人間がすべて手描きしたものと同等の熱量を受け取ることができる。

そもそも画像生成AIあくま画材しかない。

ポン出しである程度の雰囲気画像が生成される、という部分が注目されがちだが、主に構図的な粗がほぼ必ず存在して、非決定的な制御を行うしかない、とても不自由画材である

プロンプトを少しずつ変えながら大量に生成して選別することや、目的に沿って生成画像部分的修正することなど、この画材制御する試みの成果が表れている良い作品は、AI生成画像に多く触れていれば通常分かるものである

したがって、そうした作品を公開している投稿者については個人的には高く評価するし、周囲から高い評価を受けることも妥当であると考えている。

[1a]

付記すべきこととして、そうしたこだわりを持つ主体となれるのは人間だけである、というのは少なくとも現時点では正しい。

現在画像生成AIは、人間主体的に環境構築をして、プロンプトを与えて初めて動作する機械的ものであって、無から勝手に生じてきたものではない。

そのような未来においてなおAI生成画像「が」価値を持つのか、という問題は難しい。

[1b]

また厳密にいえば、「手描きであること」自体価値に含めるような作品は当然ながら画像生成AIでは実現できない。

写真と見分けがつかないように描かれた絵、というもの写真発明されて200年近く経つ今でも新しく作られているし、子どもが手描きした絵というのは唯一無二の価値があるものである

手描きの作品の多くがそういった立ち位置収束しても不思議ではない。

[2]

次に、「AI生成画像粗製乱造であり平均的に低品質だ」というコメントも見かけたが、手描きの作品粗製乱造であると考えている。

生成AI話題になる前から、人々の好みは高度に細分化されており、インターネット存在する情報ほとんどは特定少数のみに価値があるものである

個人的な話をするのであれば、まず全年齢対象作品の成人向け二次創作は非常に多く投稿されているが、原作に対する権利侵害であり、少なくとも尊敬がなく受け入れがたいように感じる。

また、一次創作の成人向け作品であっても、わざと汚く描かれた男性が出てくるものは、性的ものに対する真摯さがないという印象になってしまう。

日々たくさんの時間をかけて手描きされている作品も、少なくとも上記のような条件に当てはまる限りは、私にとっては無価値である

ただし、これらの作品が綺麗に区分けされたインターネット、というもの存在しない。

情報発信が大衆化される価値のほうが明らかに大きく、実際に私は今このほとんど価値がないテキスト匿名場所にラベルなしで放流する権利享受している。

AI生成画像について適切な区分けをすべきだという意見も、自分にとって価値がある希少なデータは手間をかけて探すしかない、ということに慣れていないだけなのでは、と考えている。

[2a]

上記の嗜好が生成AI作品を手描きより評価するうえで有利な条件となっていることは認める。

実際、プロンプトに入れないにもかかわらず二次創作が出てきてしまうことはほとんどなく、また安定した構図の絵を出力できるのは1人を指定したときなので、自分で生成した画像については上記2つの心配をせずに済んでいる。

[2b]

AI生成画像であれば一律無価値である、という思想を持つことを否定するわけでは当然ない。

作者のフォローお気に入りユーザーブロック機能による自衛など、既に存在する機能活用することが優先されるべき、という意図である

[3]

類似論点として「低品質でも素人には分からない」というものがあり、現在利用されているものの多くが低品質であることは認めるが、近い将来これも否定されると考えている。

現在の生成AIとくに言語モデルは、教師あり学習ができるデータをほぼ使い切っていて、強化学習によって性能を高めている。

より具体的に言えば、高品質教師あり学習データを作れなくても、どちらがよいか判定できさえすれば、モデルがそれをもとにより高品質ものを生成できるように学習できる。

そして画像データ人間にとって良し悪しが判定しやすい。

少なくとも画像投稿サイトのランキングSNS上の反応などを見れば、それが十分な品質アノテーションになっている。

したがって、低品質でもいいという現在消極的な導入のあとに、人間より高品質から導入するという選択が広がっていくだろうと予想できる。

[4]

まとめると、[1]こだわりのあるAI生成画像については手描きと同様に過程評価できることと、[2]個人評価基準としてはAI生成画像のほうが価値がある可能性が高いことから、私はAI生成画像を好んで鑑賞している。

また、[3]今後の学習AI生成画像のほうが自然と高品質になり、生成AI「が」いいという時代もすぐ来るのではと考えている。

[4a]

ここまでの議論のとおり、かなり急進的な生成AI推進派を自認しているが、念のため現時点の全体的な立場を表明しておく。

言うまでもないが、現行法上の犯罪に与するような生成AIの開発・利用については明確に反対の立場である

現状簡単悪用できてしまうことと、数が多くて追跡できないのは問題なので、免許制にしたり、メタデータとしてAI生成であることが分かるようにするなどの対策はあったほうが望ましい。

一方で、表現の自由を損ねるのでウォーターマークの表示義務はされないべきであると考える。

また、明示的な許諾のない大量のデータ学習することについても、同じ仕組みで得られる翻訳プログラムなどの利益享受できなくなることを考えると、規制されるべきではない。

ただし、生成AI提供によって得られた利益は寡占的な傾向があり、現在税制で再分配が十分ではなくなる可能性があるので、そのとき対応必要である

上記すべては現時点の考えであり今後変わる可能性もあるが、いずれにしても、生成AIの利用について良い塩梅定説が早めにできてほしいと考えている。

2025-06-24

anond:20250624140239

業務委託やで

会社公式HPから応募できる

契約前のテストもあってそれに合格できると晴れて契約やで

会社名は言えんけどchatGPTに「アノテーション求人一覧を提供して」って言って出てくる会社

ニートだけどアノテーション仕事してる

たとえば猫の画像がでたら「猫」ってタグをつけてインプットさせる、そんな仕事をしてる

一件5円

AIに真っ先に支配されて奴隷にされた気分だ

2025-03-15

anond:20250315155735

💻

クリーン可能性は低い と思います

 

中規模の企業が完全オリジナルデータのみで学習するのは、コスト面でも技術面でも極めて難しい です。

 

 

なぜ「完全クリーン学習」は難しいのか?

1. 莫大なデータ収集コスト

    • 画像動画3Dモデルの大量データを自社でゼロから収集するのはほぼ不可能

    • GoogleやOpenAIですらデータ調達に苦労している 現状、中規模企業が同じことをやるのは非現実的

 

2. 品質を保つためのラベリングコスト

    • 仮にデータを集められたとしても、機械学習には「正解データ教師データ)」が必要

    • 正確なラベリングアノテーション)を行うには、専門家チームを長期間雇う必要がある

    • 企業の規模にもよるが、中規模のソフトウェア企業がこのコスト負担できる可能性は低い

 

3. 既存AI技術活用しないメリットがない

    • もし本当に「AIを使わずディープラーニングに頼らず、高精度なアルゴリズムを作れた」なら、それは業界的な大発見

    • なのに論文特許も出ていない → 本当にそんな技術があるのか疑問

    • 結局、「普通にAI技術を使っているけど“(ダーティーな)AI技術ではない”と装っている」可能性が高い

 

 

もし本当に「クリーン」なら証拠を示すべき

 

 大手企業の「クリーン」って言葉の実際の意味

    • 「著作権侵害リスク最小化した」

    • 「許諾あるかオープンライセンスデータ優先した」

    • 「やばいコンテンツフィルタリングした」

 

 

 例えばAdobe Fireflyの「クリーン」は完全オリジナルという意味ではない:

    • Adobe Stockの商用ライセンス画像を利用した

    • パブリックドメイン素材を利用した

    • 著作権切れたコンテンツを利用した

 

 

 しかAdobe Fireflyは「クリーン」の証拠として下記を提供してる:

    • データソース明示

    • 学習プロセスの透明性

    • 第三者監査可能

 

 

一方、今回のペインソフトメーカーは「クリーン学習をしている(かもしれない)」という建前をふわっとさせているだけで、その証拠がない。

 

 

 

結論:「バレなきゃOKマーケティング可能性大

• 「クリーン学習をしているかAIではない」 という論理は都合のいい言葉遊び

そもそも本当に「クリーン学習」なら、証拠を示さないと信用できない

• 中規模企業独自データのみで学習するのは現実的でないため、実際には何らかの既存AI技術を使っている可能性が高い

しかし「AI使用」と言ったほうが、反AIユーザーにも売れるので、マーケティングのためにぼかしている

 

まり

AIを使っていない」風にとぼかしつつ実は普通に使っている。クリーンでもない。 → でもバレなきゃOKという雑なマーケティングをやっている可能性が高いですね。

ログイン ユーザー登録
ようこそ ゲスト さん