tim1900 commited on
Commit
82ed427
·
verified ·
1 Parent(s): 9009e51

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +338 -62
README.md CHANGED
@@ -230,7 +230,7 @@ def chunk_text_with_max_chunk_size(model, text, tokenizer, prob_threshold=0.5,ma
230
 
231
  unchunk_tokens = 0
232
  backup_pos = None
233
- best_logits = torch.finfo(torch.float32).min
234
  STEP = round(((MAX_TOKENS - 2)//2)*1.75 )
235
  print(f"Processing {input_ids.shape[1]} tokens...")
236
  # while windows_end <= input_ids.shape[1]:#记得改成windstart
@@ -335,86 +335,362 @@ def chunk_text_with_max_chunk_size(model, text, tokenizer, prob_threshold=0.5,ma
335
  return substrings, token_pos
336
  # chunking
337
  print("\n>>>>>>>>> Chunking...")
338
- doc = r'''9.
339
- *****
340
 
341
- 类提供据和功能绑定在方法创建新类时创建了新的对象 *类型*
342
- ,从而能够创建该类型的新 *实例*。实例具有能维持自身状态的属性,还具有
343
- 能修改自身状态的方法(由其所属的类来定义)。
344
 
345
- 和其他编程语言相比,Python类只使用了很少的新语法和语义。Python 的类
346
- 有点类似于 C++ 和 Modula-3 中类的结合体,而且支持面向对象编程(OOP)的
347
- 所有标准特性:类的继承机制支持多个基类、派生的类能覆盖基类的方法、类的
348
- 方法能调用基类中的同名方法。对象可包含任意数量和类型的数据。和模块一样
349
- ,类也支持 Python 动态特性:在运行时创建,创建后还可以修改。
350
 
351
- 如果用 C++ 术语来描述的话,类成员(包括数据成员)通常为 *public* (例
352
- 外的情况见下文 私有变量),所有成员函数都为 *virtual* 。与 Modula-3 中
353
- 一样,没有用于从对象的方法中引用本对象成员的简写形式:方法函数在声明时
354
- ,有一个显式的第一个参数代表本对象,该参数由方法调用隐式提供。与在
355
- Smalltalk 中一样,Python 的类也是对象,这为导入和重命名提供了语义支持
356
- 。与 C++ 和 Modula-3 不同,Python 的内置类型可以用作基类,供用户扩展。
357
- 此外,与 C++ 一样,具有特殊语法的内置运算符(算术运算符、下标等)都可
358
- 以为类实例重新定义。
359
 
360
- 由于缺乏关于类公认术语,本章中偶尔会使用 Smalltalk 和 C++ 的术语
361
- 章还会使用 Modula-3 的术语,Modula-3 的面向对象语义比 C++ 更接近
362
- Python,但估计听说过这门语言的读者很少。
363
 
 
364
 
365
- 9.1. 名称和对象
366
- ===============
367
 
368
- 对象之间相互独立,多个名称(甚至是多个作用域内的多个名称)可以绑定到同
369
- 一对象。这在其他语言中通常被称为别名。Python 初学者通常不容易理解这个
370
- 概念,处理数字、字符串、元组等不可变基本类型时,可以不必理会。但是,对
371
- 于涉及可变对象(如列表、字典,以及大多数其他类型)的 Python 代码的语义
372
- ,别名可能会产生意料之外的效果。这样做,通常是为了让程序受益,因为别名
373
- 在某些方面就像指针。例如,传递对象的代价很小,因为实现只传递一个指针;
374
- 如果函数修改了作为参数传递的对象,调用者就可以看到更改——无需像 Pascal
375
- 那样用两个不同的机制来传参。
376
 
 
377
 
378
- 9.2. Python 作用域和命名空间
379
- ============================
380
 
381
- 在介绍类前,首先要介绍 Python 的作用域规则类定义对命名空间有一些巧妙
382
- 的技巧,了解作用域和命名空间的工作机制有利于加强对类的理解。并且,即便
383
- 对于高级 Python 程序员,这方面的知识也很有用。
384
 
385
- 接下来,我们先了解一些定义
386
 
387
- *namespace* (命名空间)是从名称到对象的映射现在,大多数命名空间都使
388
- 用 Python 字典实现,但除非涉及到性能优化,我们一般不会关注这方面的事情
389
- ,而且将来也可能会改变这种方式。命名空间的例子有:内置名称集合(包括
390
- "abs()" 函数以及内置异常的名称等);一个模块的全局名称;一个函数调用中
391
- 的局部名��。对象的属性集合也是命名空间的一种形式。关于命名空间的一个重
392
- 要知识点是,不同命名空间中的名称之间绝对没有关系;例如,两个不同的模块
393
- 都可以定义 "maximize" 函数,且不会造成混淆。用户使用函数时必须要在函数
394
- 名前面加上模块名。
395
 
396
- 点号之后的名称是 **属性**例如,表达式 "z.real" 中,"real" 是对象 "z"
397
- 的属性。严格来说,对模块中名称的引用是属性引用:表达式
398
- "modname.funcname" 中,"modname" 是模块对象,"funcname" 是模块的属性。
399
- 模块属性和模块中定义的全局名称之间存在直接的映射:它们共享相同的命名空
400
- 间! [1]
401
 
402
- 属性可以是只读的或者可写的。 在后一种情况下,可以对属性进行赋值。 模
403
- 属性是可写的:你可以写入 "modname.the_answer = 42" 。 也可以使用
404
- "del" 语句删除可写属性。 例如,"del modname.the_answer" 将从名为
405
- "modname" 对象中移除属性 "the_answer"。
406
 
407
- 命名空间是在不同刻创建的,且拥有不同的生命周期。内置名称的命名空
408
- 在 Python 解释器启动时创建的,永远不会被删除。模块的全局命名空间在读取
409
- 模块定义时创建;通常,模块的命名空间也会持续到解释器退出从脚本文件读
410
- 取或交互式读取的,由解释器顶层调用执行的语句是 "__main__" 模块调用的一
411
- 部分,也拥有自己的全局命名空间内置名称实际上也在模块里,即
412
- "builtins" 。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
413
  '''
414
  # Chunk the text. The prob_threshold should be between (0, 1). The lower it is, the more chunks will be generated.
415
  # Therefore adjust it to your need, when prob_threshold is small like 0.000001, each token is one chunk,
416
  # when it is set to 1, the whole text will be one chunk, and will be forced to choose a best possible position to chunk when it is about to exceed the max_tokens_per_chunk and no token satisfy the prob_threshold.
417
- chunks, token_pos = chunk_text_with_max_chunk_size(model, doc, tokenizer, prob_threshold=0.5, max_tokens_per_chunk = 400)
418
 
419
  # print chunks
420
  for i, (c, t) in enumerate(zip(chunks, token_pos)):
 
230
 
231
  unchunk_tokens = 0
232
  backup_pos = None
233
+ best_logits = torch.finfo(torch.float32).min
234
  STEP = round(((MAX_TOKENS - 2)//2)*1.75 )
235
  print(f"Processing {input_ids.shape[1]} tokens...")
236
  # while windows_end <= input_ids.shape[1]:#记得改成windstart
 
335
  return substrings, token_pos
336
  # chunking
337
  print("\n>>>>>>>>> Chunking...")
338
+ doc = r'''经典中式家常菜:红烧肉 详尽版食谱
 
339
 
340
+ 红烧肉,作为中华美食殿堂中一颗璀璨的明珠,以其色泽红亮、肥而不腻、入口即化的独特风味,征服食客的味蕾。它不仅仅是道菜,更是一种情怀,是记忆中妈妈厨房里飘出诱人香气,是团圆饭桌上最温暖的慰藉要烹制出一盘完美红烧肉,需要耐心、技巧以及细节的专注。以下将为您详尽分解从选材到成品的每一个步骤,力求让您在家也能复刻出餐厅级别的美味。本食谱旨在深入剖析,故篇幅较长,以确保每个环节都清晰透彻。
 
 
341
 
342
+ 一、 精选主料:奠定美味基石
 
 
 
 
343
 
344
+ • 猪肉选择。
 
 
 
 
 
 
 
345
 
346
+ ◦ 首选带皮五花肉
 
 
347
 
348
+ ◦ 层次分明为佳。
349
 
350
+ ◦ 肥瘦相间是关键。
 
351
 
352
+ ◦ 厚度约三指左右。
 
 
 
 
 
 
 
353
 
354
+ ◦ 重量约一斤半为宜。
355
 
356
+ ◦ 确保猪皮完整无缺。
 
357
 
358
+ ◦ 新鲜肉品呈鲜红色
 
 
359
 
360
+ ◦ 脂肪部分应洁白细腻
361
 
362
+ • 预处理工作
 
 
 
 
 
 
 
363
 
364
+ ◦ 用镊子拔除残留猪毛
 
 
 
 
365
 
366
+ ◦ 将肉置于冷水中浸泡。
 
 
 
367
 
368
+ ◦ 浸泡时间约三十分钟。
369
+
370
+ ◦ 中途可换水一至两次
371
+
372
+ ◦ 目的是泡出部分血水
373
+
374
+ ◦ 然后用刀刮洗猪皮表面。
375
+
376
+ ◦ 彻底清除污物和杂质。
377
+
378
+ ◦ 最后用流动水冲洗干净。
379
+
380
+ 二、 准备辅料:调配灵魂之味
381
+
382
+ • 主要调味品。
383
+
384
+ ◦ 老抽:负责上色。
385
+
386
+ ◦ 用量需谨慎控制。
387
+
388
+ ◦ 过多会导致发黑发苦。
389
+
390
+ ◦ 生抽:提供咸鲜底味。
391
+
392
+ ◦ 与老抽比例约二比一。
393
+
394
+ ◦ 优质花雕酒是精髓。
395
+
396
+ ◦ 去腥增香效果显著。
397
+
398
+ ◦ 冰糖:首选黄冰糖。
399
+
400
+ ◦ 炒出的糖色更红亮。
401
+
402
+ ◦ 风味也比白糖醇和。
403
+
404
+ • 香辛料组合。
405
+
406
+ ◦ 生姜一大块,切片。
407
+
408
+ ◦ 大葱一根,切成长段。
409
+
410
+ ◦ 蒜头数瓣,轻轻拍松。
411
+
412
+ ◦ 八角两至三颗,增香。
413
+
414
+ ◦ 桂皮一小段,勿过多。
415
+
416
+ ◦ 香叶两片,增添风味。
417
+
418
+ ◦ 草果一颗,可拍裂开。
419
+
420
+ ◦ 干辣椒依个人口味添加。
421
+
422
+ • 其他基础材料。
423
+
424
+ ◦ 食用油适量,需耐高温。
425
+
426
+ ◦ 最好使用菜籽油或花生油。
427
+
428
+ ◦ 食盐少许,用于最后调味。
429
+
430
+ ◦ 因为酱油已有咸度。
431
+
432
+ ◦ 准备足量的开水备用。
433
+
434
+ ◦ 切记不可使用冷水。
435
+
436
+ ◦ 冷水会使肉质收缩变柴。
437
+
438
+ 三、 精细加工:关键步骤解析
439
+
440
+ • 肉块改刀。
441
+
442
+ ◦ 将洗净的五花肉捞出。
443
+
444
+ ◦ 用厨房纸彻底吸干水分。
445
+
446
+ ◦ 这一步非常重要。
447
+
448
+ ◦ 能有效防止后续溅油。
449
+
450
+ ◦ 将肉切成三厘米见方块。
451
+
452
+ ◦ 大小尽量保持均匀一致。
453
+
454
+ ◦ 以确保受热和入味均匀。
455
+
456
+ ◦ 切面应能看到完美层次。
457
+
458
+ • 焯水去腥。
459
+
460
+ ◦ 冷水下锅,放入切好的肉。
461
+
462
+ ◦ 同时加入几片生姜。
463
+
464
+ ◦ 倒入一汤匙花雕酒。
465
+
466
+ ◦ 开大火煮沸,撇净浮沫。
467
+
468
+ ◦ 浮沫是血水和杂质所致。
469
+
470
+ ◦ 务必撇除干净直至汤清。
471
+
472
+ ◦ 焯水时间约五到八分钟。
473
+
474
+ ◦ 煮至肉块变色定型即可。
475
+
476
+ • 捞出与冲洗。
477
+
478
+ ◦ 用漏勺将肉块捞出。
479
+
480
+ ◦ 立即放入温水中冲洗。
481
+
482
+ ◦ 洗去表面残留的浮沫。
483
+
484
+ ◦ 注意水温不宜过低。
485
+
486
+ ◦ 再次用厨房纸吸干水分。
487
+
488
+ ◦ 防止入锅时油花四溅。
489
+
490
+ ◦ 此时肉块呈灰白色。
491
+
492
+ ◦ 经过焯水已无肉腥味。
493
+
494
+ 四、 核心工艺:炒糖色与煸炒
495
+
496
+ • 炒制糖色。
497
+
498
+ ◦ 锅烧热,倒入少量底油。
499
+
500
+ ◦ 放入准备好的冰糖。
501
+
502
+ ◦ 开中小火慢慢搅动。
503
+
504
+ ◦ 观察冰糖融化的过程。
505
+
506
+ ◦ 先从固体变为液态。
507
+
508
+ ◦ 再从小泡转为密集大泡。
509
+
510
+ ◦ 当大泡逐渐回落消失时。
511
+
512
+ ◦ 糖液颜色开始加深。
513
+
514
+ • 观察颜色变化。
515
+
516
+ ◦ 从浅黄色变为枣红色。
517
+
518
+ ◦ 这个瞬间非常关键。
519
+
520
+ ◦ 枣红色时立即下入肉块。
521
+
522
+ ◦ 过早则甜腻,过晚则发苦。
523
+
524
+ ◦ 动作务必迅速而准确。
525
+
526
+ ◦ 糖色是红亮色泽的来源。
527
+
528
+ ◦ 也是风味层次的基��。
529
+
530
+ • 煸炒肉块。
531
+
532
+ ◦ 快速颠锅,使每块肉均匀裹上糖色。
533
+
534
+ ◦ 持续翻炒约三到五分钟。
535
+
536
+ ◦ 直到肉块表面微微焦黄。
537
+
538
+ ◦ 部分油脂被煸炒出来。
539
+
540
+ ◦ 这样吃起来肥而不腻。
541
+
542
+ ◦ 同时香味物质充分释放。
543
+
544
+ ◦ 煸出的猪油可倒出部分。
545
+
546
+ ◦ 留作炒青菜风味极佳。
547
+
548
+ 五、 炖煮入味:时间与火候的艺术
549
+
550
+ • 加入调料。
551
+
552
+ ◦ 沿着锅边烹入花雕酒。
553
+
554
+ ◦ 瞬间激发出浓郁酒香。
555
+
556
+ ◦ 接着倒入适量生抽。
557
+
558
+ ◦ 再加入少许老抽上色。
559
+
560
+ ◦ 放入所有香料:姜、葱、蒜等。
561
+
562
+ ◦ 与肉块一起翻炒均匀。
563
+
564
+ ◦ 让酱香与肉香充分融合。
565
+
566
+ ◦ 翻炒约两分钟至香气扑鼻。
567
+
568
+ • 注入开水。
569
+
570
+ ◦ 务必一次性加足开水。
571
+
572
+ ◦ 水量要完全没过肉块。
573
+
574
+ ◦ 甚至可以略多一些。
575
+
576
+ ◦ 避免中途再次加水。
577
+
578
+ ◦ 大火烧开后转小火。
579
+
580
+ ◦ 盖上锅盖,慢火焖炖。
581
+
582
+ ◦ 这是“入口即化”的关键。
583
+
584
+ ◦ 时间至少需要一小时。
585
+
586
+ • 慢炖过程。
587
+
588
+ ◦ 保持汤面微沸即可。
589
+
590
+ ◦ 火候切忌过大过急。
591
+
592
+ ◦ 否则容易烧干且肉不烂。
593
+
594
+ ◦ 期间可偶尔开盖查看。
595
+
596
+ ◦ 用勺子轻轻推动一下。
597
+
598
+ ◦ 防止粘锅底的情况发生。
599
+
600
+ ◦ 但尽量不要频繁翻动。
601
+
602
+ ◦ 以免影响肉块的完整。
603
+
604
+ 六、 收汁与装盘:成就最终美味
605
+
606
+ • 大火收汁。
607
+
608
+ ◦ 炖煮一小时后。
609
+
610
+ ◦ 用筷子戳一下瘦肉部分。
611
+
612
+ ◦ 若能轻松戳透即表示已软烂。
613
+
614
+ ◦ 此时根据汤汁咸度加盐。
615
+
616
+ ◦ 开大火,将汤汁收浓。
617
+
618
+ ◦ 用锅铲不停搅动。
619
+
620
+ ◦ 防止糊底,并让汤汁变稠。
621
+
622
+ ◦ 均匀包裹在每一块肉上。
623
+
624
+ • 收汁技巧。
625
+
626
+ ◦ 收到汤汁浓稠如蜜。
627
+
628
+ ◦ 油亮红润的汤汁紧裹肉块。
629
+
630
+ ◦ 锅中泛起密集的大泡。
631
+
632
+ ◦ 即可准备关火出锅。
633
+
634
+ ◦ 收汁程度依个人喜好。
635
+
636
+ ◦ 喜欢拌饭可多留些汤汁。
637
+
638
+ ◦ 整个过程需密切留意。
639
+
640
+ ◦ 最后阶段变化非常迅速。
641
+
642
+ • 最终成品。
643
+
644
+ ◦ 将红烧肉盛入预热好的盘中。
645
+
646
+ ◦ 可烫几棵小油菜围边。
647
+
648
+ ◦ 既点缀色彩,又解油腻。
649
+
650
+ ◦ 撒上少许葱花或香菜末。
651
+
652
+ ◦ 一道色香味俱全的红烧肉完成。
653
+
654
+ ◦ 肉质软糯,肥而不腻。
655
+
656
+ ◦ 咸中带甜,回味无穷。
657
+
658
+ ◦ 配上一碗白米饭是绝配。
659
+
660
+ 七、 要点总结与升华
661
+
662
+ • 成功关键。
663
+
664
+ ◦ 选材是基础,务必新鲜。
665
+
666
+ ◦ 焯水步骤不可省略。
667
+
668
+ ◦ 炒糖色是技术核心。
669
+
670
+ ◦ 火候控制是成败关键。
671
+
672
+ ◦ 耐心慢炖是美味保证。
673
+
674
+ • 变化与创新。
675
+
676
+ ◦ 可加入土豆、鹌鹑蛋同烧。
677
+
678
+ ◦ 吸收肉汤,滋味更丰富。
679
+
680
+ ◦ 也可尝试用啤酒代替水。
681
+
682
+ ◦ 别有一番风味层次。
683
+
684
+ ◦ 但万变不离其宗。
685
+
686
+ ◦ 核心技法仍需掌握。
687
+
688
+ 烹饪是一门需要实践的艺术,红烧肉更是如此。希望这份详尽的食谱能成为您厨房路上的得力助手,愿您能享受从准备到品尝的整个过程,与家人朋友分享这份由时间与匠心凝聚而成的温暖美味。每一次尝试都是一次经验的积累,祝您烹饪愉快,早日成就属于自己的招牌红烧肉!。
689
  '''
690
  # Chunk the text. The prob_threshold should be between (0, 1). The lower it is, the more chunks will be generated.
691
  # Therefore adjust it to your need, when prob_threshold is small like 0.000001, each token is one chunk,
692
  # when it is set to 1, the whole text will be one chunk, and will be forced to choose a best possible position to chunk when it is about to exceed the max_tokens_per_chunk and no token satisfy the prob_threshold.
693
+ chunks, token_pos = chunk_text_with_max_chunk_size(model, doc, tokenizer, prob_threshold=0.5, max_tokens_per_chunk = 100)
694
 
695
  # print chunks
696
  for i, (c, t) in enumerate(zip(chunks, token_pos)):